码迷,mamicode.com
首页 > 编程语言 > 详细

java 生产者与消费者初级探讨

时间:2015-05-07 01:04:09      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:available   public   produced   生产者   消费者   

最近学习java多线程有点迷糊,经过一天的整理,知道了什么是生产者,什么是消费者,以及消费者与生产者的关系:

技术分享

在 Person类中是一个实体没有具体的对象,靠Input传入,Output读出,只有当Input有传入后,才能被Output读出,因此对呀Input和Output,要上一把同样的锁,synchronized将两个线程同步。

wait(),notify(),notifyAll()都是继承至上帝类的:下面是生产者消费者的代码


  1. //生产/消费者模式   

  2.   

  3. public class Basket {   

  4.   

  5. Lock lock = new ReentrantLock();   

  6.   

  7.   

  8. // 产生Condition对象   

  9.   

  10. Condition produced = lock.newCondition();   

  11.   

  12. Condition consumed = lock.newCondition();   

  13.   

  14. boolean available = false;   

  15.   

  16.   

  17. public void produce() throws InterruptedException {   

  18.   

  19. lock.lock();   

  20.   

  21.   

  22. try {   

  23.   

  24. if (available) {   

  25.   

  26. produced.await(); // 放弃lock进入睡眠   

  27.   

  28. }   

  29.   

  30.   

  31. System.out.println("Apple produced.");   

  32.   

  33.   

  34. available = true;   

  35.   

  36.   

  37. consumed.signal(); // 发信号唤醒等待这个Condition的线程   

  38.   

  39. finally {   

  40.   

  41. lock.unlock();   

  42.   

  43. }   

  44.   

  45. }   

  46.   

  47.   

  48. public void consume() throws InterruptedException {   

  49.   

  50. lock.lock();   

  51.   

  52.   

  53. try {   

  54.   

  55. if (!available) {   

  56.   

  57. consumed.await(); // 放弃lock进入睡眠   

  58.   

  59. }   

  60.   

  61.   

  62. /* 吃苹果 */  

  63.   

  64. System.out.println("Apple consumed.");   

  65.   

  66.   

  67. available = false;   

  68.   

  69.   

  70. produced.signal(); // 发信号唤醒等待这个Condition的线程   

  71.   

  72. finally {   

  73.   

  74. lock.unlock();   

  75.   

  76. }   

  77.   

  78. }   

  79.   

  80. }  


本文出自 “javaSE与android” 博客,谢绝转载!

java 生产者与消费者初级探讨

标签:available   public   produced   生产者   消费者   

原文地址:http://sly920224.blog.51cto.com/6958550/1643663

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!