我写了一个利用多线程通信的程序目的是输出:
杨海刚----->男
王云------>女
杨海刚----->男
王云------>女
...
...
这样的结果
可结果老是
杨海刚----->男
杨海刚----->男
杨海刚----->男
...
王云------>女
王云------>女
王云------>女
...
杨海刚----->男
杨海刚----->男
杨海刚----->男
...
不知道哪里不对以下是代码:
class Q1
{
private String name=new String("王云");
private String sex =new String("女");
boolean bFull=true;
public synchronized void put(String name, String sex)
{
if(!bFull)
wait();
this.name=name;
try
{
Thread.sleep(10);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=false;
notify();
}
public synchronized void get()
{
if(bFull)
wait();
System.out.println(name+"------->"+sex);
bFull=true;
notify();
}
}
class Producer1 implements Runnable
{
Q1 q=null;
public Producer1(Q1 q)
{
this.q=q;
}
public void run()
{
int i=0;
while(true)
{
if(i==1)
{
q.put("王云", "女");
}
else
{
q.put("杨海刚", "男");
}
i=(i+1)%2;
}
}
}
class Consumer1 implements Runnable
{
Q1 q=null;
public Consumer1(Q1 q)
{
this.q=q;
}
public void run()
{
while(true)
{
q.get();
}
}
}
class ThreadCommunation1
{
public static void main(String[] args)
{
Q1 q=new Q1();
new Thread(new Consumer1(q)).start();
new Thread(new Producer1(q)).start();
}
}
杨海刚----->男
王云------>女
杨海刚----->男
王云------>女
...
...
这样的结果
可结果老是
杨海刚----->男
杨海刚----->男
杨海刚----->男
...
王云------>女
王云------>女
王云------>女
...
杨海刚----->男
杨海刚----->男
杨海刚----->男
...
不知道哪里不对以下是代码:
class Q1
{
private String name=new String("王云");
private String sex =new String("女");
boolean bFull=true;
public synchronized void put(String name, String sex)
{
if(!bFull)
wait();
this.name=name;
try
{
Thread.sleep(10);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=false;
notify();
}
public synchronized void get()
{
if(bFull)
wait();
System.out.println(name+"------->"+sex);
bFull=true;
notify();
}
}
class Producer1 implements Runnable
{
Q1 q=null;
public Producer1(Q1 q)
{
this.q=q;
}
public void run()
{
int i=0;
while(true)
{
if(i==1)
{
q.put("王云", "女");
}
else
{
q.put("杨海刚", "男");
}
i=(i+1)%2;
}
}
}
class Consumer1 implements Runnable
{
Q1 q=null;
public Consumer1(Q1 q)
{
this.q=q;
}
public void run()
{
while(true)
{
q.get();
}
}
}
class ThreadCommunation1
{
public static void main(String[] args)
{
Q1 q=new Q1();
new Thread(new Consumer1(q)).start();
new Thread(new Producer1(q)).start();
}
}
只是程序有点错,那两个 wait()要抛出异常的