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

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

在 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. }