不用等待唤醒机制下的多生产多消费有什么缺陷

class Resouce
{
private int count=1;
private String name;
boolean flag=true;
Resouce(String name)
{
this.name=name;
}
synchronized void set()
{
if(!flag)
{
System.out.println(Thread.currentThread().getName()+"------生产---------"+name+count);
count++;
}
flag=true;
}
synchronized void get()
{
if(flag)
{
System.out.println(Thread.currentThread().getName()+"------消费---------"+name+count);
}
flag=false;//
}
}
class Product implements Runnable
{
private Resouce r;
Product(Resouce r)
{
this.r=r;
}
public void run()
{
while(true)
r.set();
}

}
class Consumer implements Runnable
{
private Resouce r;
Consumer(Resouce r)
{
this.r=r;
}
public void run()
{
while(true)
r.get();
}
}

class Demo
{
public static void main(String[] args)
{
Resouce r=new Resouce("烧鸡");
Product p=new Product(r);
Consumer c=new Consumer(r);
Thread t1=new Thread(p);
Thread t2=new Thread(p);
Thread t3=new Thread(c);
Thread t4=new Thread(c);
t1.start();
t2.start();
t3.start();
t4.start();
}

1. }

唤醒呢是进入等待状态,而如果用sleep(),那么程序是进入阻塞状态,当再次运行,那么各个线程会重新去竞争,而唤醒是等待某个操作完成后,继续执行的过程

http://bbs.itheima.com/thread-229974-1-1.html

http://www.mamicode.com/info-detail-151408.html

http://www.aiuxian.com/article/p-2148916.html