《生产者与消费者》简单例子?
2015-01-19 10:58
232 查看
<span style="font-family:Times New Roman;">package communication;</span>
<span style="font-family:Times New Roman;"> //运行结果不太能理解,-1 ???? /*开始消费者调用消费方法时处于等待状态,此时唤起生产者线程 * 生产者开始生产共享数据之后,消费者进行消费,但是当共享数据为空,所有消费者必须等待,生产者继续生产,然后消费者再次消费 * 如此循环直到程序运行最后,可以看到线程一直等待。 * 这个线程进入等待后没有其他线程唤醒,出除非强行退出JVM环境,否则一直等待..*/ public class ThreadCommunication{ public static void main(String args[]){ Queue q = new Queue(); Producer p = new Producer(q); Consumer c = new Consumer(q); c.start(); p.start(); } } //生产者线程 class Producer extends Thread { Queue q; Producer(Queue q) { this.q = q; } public void run() { for (int i = 0; i < 5; i++) { q.put(i);// 给队列中添加元素 } } } // 消费者线程 class Consumer extends Thread { Queue q; Consumer(Queue q) { this.q = q; } public void run() { while (true) { q.get();// 删除队列元素,返回队列余值 } } } class Queue { int value = 0;//初始时,队列中元素个数value为0 boolean isEmpty = true;//用于判断队列的状态,空或非空 //生产者生产方法 public synchronized void put(int v) { if(!isEmpty){//队列不空时,生产者线程等待 System.out.println("队列非空,生产者等待..."); try { wait();//等待队列有空闲 } catch (InterruptedException e) { e.printStackTrace(); } } //队列为空时,生产者生产,value+1;isEmpty置为false System.out.println("\n生产者生产:"); value+=v;//value值加v isEmpty = false; System.out.println("生产者共生产数量:"+v); notify();//生产者生产之后通知消费者消费 } //消费者消费方法 public synchronized int get() { if(isEmpty){//队列为空时,消费者线程等待。 System.out.println("队列为空,消费者等待..."); try { wait();//等待队列有空闲 } catch (InterruptedException e) { e.printStackTrace(); } } //队列不空时,消费:value-1;减到0,将isEmpty置为true通知生产者生产。 System.out.println("\n消费者消费:"); value--;//value值减v if(value<1){//判断value是否减成了零 isEmpty =true; } System.out.println("消费者消费一个,剩余:"+value); notifyAll();//消费者消费后,通知生产者生产 return value; } } </span>
相关文章推荐
- 生产者和消费者的简单的例子:用互斥锁控制
- Go 消费者和生产者的简单例子
- 一个简单的生产者与消费者的多线程例子(二):不让消费者或生产者无限期地等待
- 多线程--生产者消费者--简单例子
- Go 消费者和生产者的简单例子
- 多线程--生产者消费者--简单例子
- Java多线程之简单生产者和消费者例子
- 生产者和消费者的简单例子
- 简单的生产者消费者例子
- 一个简单的生产者与消费者的多线程例子(一):简单的框架
- Go 消费者和生产者的简单例子
- 一个简单的生产者/消费者例子
- activemq消息生产者与消息消费者简单例子
- Java- 简单了解线程 生产者与消费者问题(三)
- 学习和理解JAVA线程同步--生产者与消费者例子
- Java线程安全总结(包含生产者和消费者例子)
- 多线程实现消费者生产者的例子
- Ruby简单的生产者,消费者模式的实现
- java生产者消费者例子
- 多线程 :消费者生产者 --线程通讯例子