class Producer implements Runnable
{
Buffer q;
public Producer(Buffer q)
{
this.q=q;
}
public void run()
{
int i=0;
while(true)
{
/*
synchronized(q)//
{
if(q.bFull)
try{q.wait();}catch(Exception e){}//必须是同步监视器的wait()
if(i==0)
{
q.name ="zhangsan";
try{Thread.sleep(1);}catch(Exception e){}
q.sex ="man";
}
else
{
q.name ="lisi";
q.sex ="female";
}
q.bFull=true;
q.notify();
}
*/
if(i==0)
{
p.put("zhangsan","nan");
}
else
{
p.put("Lisi","female");
}
i=(i+1)%2;
}
}
}
class Consummer implements Runnable
{
Buffer q;
public Consummer(Buffer q)
{
this.q=q;
}
public void run()
{
while(true)
{
/*
synchronized(q)
{
if(!q.bFull)
try{q.wait();}catch(Exception e){}
System.out.print(q.name);
System.out.println(q.sex);
q.bFull=false;
q.notify();
}
*/
q.get();
}
}
}
class Buffer
{
private String name="unknow";
private String sex="unknow";
private boolean bFull=false;
public synchronized void put(String name,String sex)
{
if(bFull)
this.wait();
this.name = name;
this.sex = sex;
bFull = true;
this.notify();
}
public synchronized void get()
{
if(!bFull)
this.wait();
System.out.println(this.name);
System.out.println(this.sex);
bFull=false;
this.notify();
}
}
class TestThreadCoummunication
{
public static void main(String args[])
{
Buffer q = new Buffer();
Producer per = new Producer(q);
Consummer cer = new Consummer(q);
new Thread(per).start();
new Thread(cer).start();
}
}
线程同步
最新推荐文章于 2022-04-05 12:23:48 发布