Java 多线程间通信 多生产 多消费问题
2017-08-25 21:34
363 查看
/* 生产者,消费者 多生产者,多消费者的问题 if判断标记 只有一次 会导致不该运行的线程运行了,出现了数据错误的情况 while判断标记 解决了线程获取执行权后,是否要允许! notifyAll解决了 本方线程一定会唤醒对方线程(但是影响效率) notify 只能唤醒一个线程,如果本方唤醒了本方没有意义 而且while判断标记+ notify会导致死锁 */ class Producer implements Runnable{ private Resource r; Producer(Resource r){ this.r=r; } public void run(){ while(true){ r.set("烤鸭"); } } } class Consumer implements Runnable{ private Resource r; Consumer(Resource r){ this.r=r; } public void run(){ while(true){ r.out(); } } } class Resource{ private String name; private int count=1; private boolean flag=false; public synchronized void set(String name){ while(flag){ try{wait();} catch(InterruptedException e){} } this.name=name+count; count++; System.out.println(Thread.currentThread().getName()+"..生产者.."+this.name); flag=true; notify(); } public synchronized void out(){ while(!flag){ try{wait();} catch(InterruptedException e){} } System.out.println(Thread.currentThread().getName()+"..--消费者----.."+this.name); flag=false; notify(); } } class ProducerConsumerDemo{ public static void main(String[] args) { Resource r=new Resource(); Producer pro=new Producer(r); Consumer con=new Consumer(r); Thread t0=new Thread(pro); Thread t1=new Thread(pro); Thread t2=new Thread(con); Thread t3=new Thread(con); t0.start(); t1.start(); t2.start(); t3.start(); } }
相关文章推荐
- java多线程的同步 通信以及生产消费者问题
- java多线程之生产消费问题
- 多线程经典问题:馒头问题 生产和消费问题(线程的通信问题)
- java多线程的同步 通信以及生产消费者问题
- java学习9:生产和消费问题,先生产才能消费,线程间通信与等待
- Java中多线程的多生产多消费问题的解决方案
- java多线程的同步 通信以及生产消费者问题
- Java多线程的单生产单消费和多生产多消费问题的解决
- Java多线程实例->生产消费模式
- java多线程(生产消费)
- Java多线程系列--“基础篇”11之 生产消费者问题
- java多线程之生产消费模式
- 《黑马程序员》java笔记->生产消费多线程,同步代码块(优化代码)
- Java多线程系列--“基础篇”11之 生产消费者问题
- Java多线程系列--“基础篇”11之 生产消费者问题 (r)
- 多线程多生产多消费问题以及解决
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。
- 多线程生产消费问题
- java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)
- 多线程中多生产多消费问题