Java多线程 9 多个生产者和消费者
来源:互联网 发布:米兰达可儿 知乎 编辑:程序博客网 时间:2024/05/29 16:28
多个生产者和消费者的时候,需要考虑更多情况
package thread;/*对于多个生产者和消费者。为什么要定义while判断标记。原因:让被唤醒的线程再一次判断标记。为什么定义notifyAll,因为需要唤醒对方线程。因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待。*/public class Thread_6_ProducerConsumerDemo2 {public static void main(String[] args) {Resource r = new Resource();Producer pro = new Producer(r);Consumer con = new Consumer(r);Thread t1 = new Thread(pro);Thread t2 = new Thread(pro);Thread t3 = new Thread(con);Thread t4 = new Thread(con);t1.start();t2.start();t3.start();t4.start();}}class Resource{private String name;private int count = 1;private boolean flag = false;public synchronized void set(String name){//这里的while循环保证了某一方执行notify之后如果不小心被唤醒的是本方,则会被再次等待while(flag)try{this.wait();}catch(Exception e){}this.name = name+"--"+count++;System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);flag = true;//这里的notifyAll()会唤醒所有生产者和消费者,避免了同一类的所有角色都进入wait状态的风险this.notifyAll();}public synchronized void out(){while(!flag)try{wait();}catch(Exception e){}System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);flag = false;this.notifyAll();}}class Producer implements Runnable{private Resource res;Producer(Resource res){this.res = res;}public void run(){while(true){res.set("+商品+");}}}class Consumer implements Runnable{private Resource res;Consumer(Resource res){this.res = res;}public void run(){while(true){res.out();}}}
- Java多线程 9 多个生产者和消费者
- java多线程 一个生产者和多个消费者
- Java 多线程 生产者和消费者
- Java多线程-生产者和消费者
- Java多线程 多个生产者和多个消费者实现同步 jdk1.4
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- java多线程之--多的生产者与多个消费者
- java 用多线程实现多生产者和多消费者模式
- Java多线程六:生产者和消费者模型(多对多)
- Java多线程系列(9)--生产者和消费者
- java多线程 消费者-生产者
- java多线程 消费者-生产者
- java 多线程 生产者消费者
- JAVA [ 多线程 -- 生产者消费者 ]
- Java 多线程-生产者、消费者
- java多线程--生产者消费者
- java多线程-生产者消费者
- Java多线程生产者消费者
- js中的异常处理
- 十二五中国电信宽带战略解析(二):大国与大企
- 2013 ACM/ICPC Asia Regional Chengdu Online&hdu4735Little Wish~ lyrical step~(DLX解重复覆盖)
- OCP-1Z0-053-V12.02-59题
- 求数组中唯一重复的元素
- Java多线程 9 多个生产者和消费者
- Java多线程 10 处理锁的更好选择
- Objective-C Associative References(关联引用)
- Java多线程 11 终止线程
- 黑马程序员_日记01(多线程)
- 那么,今天我的技术博客就开通了!
- Java多线程 12 剩下的一些特性
- 软件开发完毕
- Android中shape的使用