您的位置:首页 > 其它

生产,消费者改进

2019-07-29 18:08 323 查看
原文链接:https://www.geek-share.com/detail/2631723680.html
/*
等待的目的是让cpu给其他线程。
*/
class Resource
{
private String name;
private int count = 0;
private boolean flag = false;
Resource(String name)
{
this.name = name;
}

public synchronized void product()
{
while(flag)						//此处如果是if的效果
{
try
{
wait();
}
catch (InterruptedException ex)
{

}
}

this.name = "---"+this.count;
System.out.println(Thread.currentThread().getName() + "生产者---" + this.name);
flag  = true;
this.count++;
this.notify();
}

public synchronized void consume()
{
while(!flag)					//此处如果是if的效果,如果某个线程被wait,接着又一个,然后两个都醒了,就会造成对一个产品两次消费
{
try
{
wait();
}
catch (InterruptedException ex)
{
}
}

System.out.println(Thread.currentThread().getName() + "消费者---------" + this.name);
flag = false;
this.notify();
}
}

class Product implements Runnable
{
private Resource sr;
Product(Resource sr)
{
this.sr = sr;
}

public void run()
{
while(true)
{
if(sr != null)
{
sr.product();
}
}
}
}

class Consume implements Runnable
{
private Resource sr;
Consume(Resource sr)
{
this.sr = sr;
}

public void run()
{
while(true)
{
if(sr != null)
{
sr.consume();
}
}
}
}
class DemoRunnable
{
public static void main(String[] args)
{
Resource sr = new Resource("产品");
Product p = new Product(sr);
Consume c =new Consume(sr);
Thread t1 = new Thread(p);
Thread t2 = new Thread(p);
Thread c1 = new Thread(c);
Thread c2 = new Thread(c);
Thread c3 = new Thread(c);
t1.start();
t2.start();
c1.start();
c2.start();
c3.start();
}
}

转载于:https://www.cnblogs.com/dengshiwei/p/4258538.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: