Java 多线程(二)线程间的通信应用--生产者消费者(未完)
2016-11-29 00:00
706 查看
对于多个生产者和消费者。
为什么要定义while判断标记。
原因:让被唤醒的线程再一次判断标记。
为什么定义notifyAll,
因为需要唤醒对方线程。
因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待。
启动主类
/** * */ package threadCommnication; /** * <p>Title: InputOutputDemo</p> * <p>Description: </p> * <p>Company: </p> * @author 夏 杰 * @date 2015年12月12日 下午8:40:53 * @vesion 1.0 */ public class ConsumerProducerDemo { public static void main(String[] args) { Resource resource = new Resource(); Producer producer = new Producer(resource); Consumer consumer = new Consumer(resource); //启动生产者线程 new Thread(producer).start(); //启动消费者线程 new Thread(consumer).start(); } }
所要生产的资源
/** * */ package threadCommnication; public class Resource { String name; private int count = 1; /** * 标志位 * flag = false 表示没有资源了,要生产,消费者不能取 * flage = ture 表示有资源,不要生产,消费者可以取 */ private boolean flag = false; public synchronized void set(String name) throws InterruptedException{ if(flag == true){ //当已经有资源时要等待消费者取走后,才能生产 this.wait(); }else { //当没有资源时,继续生产 this.name = name+"--"+count++; System.out.println(Thread.currentThread().getName()+"---生产者---"+this.name); flag = true; //当生产了后,通知等待的消费者来取 this.notify(); } } public synchronized void out() throws InterruptedException{ if(flag == true){ //当有资源时可以取走 System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name); flag = false; //通知生产者可以继续生产 this.notify(); }else{ //当没有资源时等待生产者生产 this.wait(); } } }
生产者
/** * */ package threadCommnication; public class Producer implements Runnable{ private Resource resource; boolean flag = false; //保证传入对象唯一性 public Producer(Resource resource) { this.resource = resource; } @Override public synchronized void run() { while(true){ try { resource.set("+商品+"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
消费者
/** * */ package threadCommnication; public class Consumer implements Runnable{ private Resource resource; public Consumer(Resource resource){ //保证传入对象唯一性 this.resource = resource; } @Override public synchronized void run() { while(true) { try { resource.out(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- Java 多线程(二)线程间的通信应用--生产者消费者(未完)
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- Java基础学习__多线程(线程间通信--生产者消费者JDK5.0升级版)
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- (九)Java入门--多线程(5)线程通信--多生产者多消费者
- Java多线程之线程间通信--生产者/消费者模式
- Java基础学习6_多线程(线程间通信--生产者消费者)
- java多线程之 生产者和消费者 线程间通信 等待与唤醒机制
- java多线程:线程间的通信-生产者和消费者(三)
- JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池
- java多线程线程通信——生产者和消费者
- 黑马程序员--JAVA基础复习之多线程(三)线程间通信 生产者消费者
- java多线程-线程间通信_生产者消费者
- java生产者消费者问题(线程同步与线程等待的应用)
- JAVA学习笔记(1)_____模拟线程通信之生产者消费者问题
- 多线程执行多任务(线程通信):生产者消费者模型(一)
- 线程通信,生产者消费者问题(Java)
- JAVA 线程间通信 - 生产者与消费者
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- 多线程执行多任务(线程通信):生产者消费者模型(二)