生产,消费者改进
2015-01-08 21:28
239 查看
/* 等待的目的是让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(); } }
相关文章推荐
- 生产,消费者改进
- 多线程之多生产多消费者
- Java多线程-生产消费者2
- java使用BlockingQueue实现生产消费者模式
- 编写一个多线程程序,模拟2个生产者生产产品,3个消费者消费产品。2个生产者不停的生产商品3个消费者不停的消费产品。
- 生产/消费者模型的实现 —— InfoQueue
- java 生产消费者问题的多种实现方式
- java:生产者与消费者随机多数量生产与消费
- VC++ 学习笔记------Window 多线程(生产消费者模式 案例)
- wait/notify实现生产消费者模式
- 多线程等待唤醒机制之生产消费者模式
- 生产消费者模式
- 生产消费者模式
- 多线程之生产消费者【经典例子java】
- 最简单生产消费者模型理解(线程同步,共享资源,信号
- 生产者/消费者模型改进版 ——队列
- 生产消费者问题 CreateMutex
- 原版线程通信之生产消费者模式
- java多线程的同步 通信以及生产消费者问题
- 深度剖析java线程安全|内存模型|生产消费者模式|