电脑做系统网站/网页开发需要学什么
java 生产者和消费者——Synchronized方式
java 生产者和消费者——ReentrantLock方式
java 生产者和消费者——BlockingQueue方式
/*** 生产者消费者问题: 容器最多放5个商品;当容器未装满时,生产者一直生产商品并放入容器中,当容器中有商品时,消费者就一直消费商品; 情景:* 生产者生产20个商品并被消费者消费*/
public class ProducerAndComsumerDemo {private int pruductsSum = 0;private int FULL = 5;// 容器中最多容纳5个产品private Lock lock;private Condition notEmptyCondition;private Condition notFullCondition;private ProducerAndComsumerDemo() {lock = new ReentrantLock();notEmptyCondition = lock.newCondition();notFullCondition = lock.newCondition();}public static void main(String[] args) {ProducerAndComsumerDemo demo1 = new ProducerAndComsumerDemo();new Thread(demo1.new Producer()).start();new Thread(demo1.new Consumer()).start();}class Producer implements Runnable {@Overridepublic void run() {for (int i = 0; i < 20; i++) {try {Thread.sleep(150);} catch (InterruptedException e) {e.printStackTrace();}lock.lock();try {while (pruductsSum == FULL) {try {System.out.println("容器里剩余" + pruductsSum + "个,生产者wait");notFullCondition.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("生产者 生产前 总共有 " + pruductsSum + " 个商品");pruductsSum++;System.out.println("生产者 生产后 总共有 " + pruductsSum + " 个商品");System.out.println("---------------------------------------------------------------------------");notEmptyCondition.signal();} finally {lock.unlock();}}}}class Consumer implements Runnable {@Overridepublic void run() {for (int i = 0; i < 20; i++) {try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}lock.lock();try {while (pruductsSum == 0) {try {notEmptyCondition.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("消费者 消费前 总共有 " + pruductsSum + " 个商品");pruductsSum--;System.out.println("消费者 消费后 总共有 " + pruductsSum + " 个商品");System.out.println("---------------------------------------------------------------------------");notFullCondition.signal();} finally {lock.unlock();}}}}
}
运行结果的其中一次日志
生产者 生产前 总共有 0 个商品
生产者 生产后 总共有 1 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 1 个商品
消费者 消费后 总共有 0 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 0 个商品
生产者 生产后 总共有 1 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 1 个商品
生产者 生产后 总共有 2 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 2 个商品
消费者 消费后 总共有 1 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 1 个商品
生产者 生产后 总共有 2 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 2 个商品
生产者 生产后 总共有 3 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 3 个商品
消费者 消费后 总共有 2 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 2 个商品
生产者 生产后 总共有 3 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 3 个商品
生产者 生产后 总共有 4 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 4 个商品
消费者 消费后 总共有 3 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 3 个商品
生产者 生产后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
容器里剩余5个,生产者wait
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
生产者 生产前 总共有 4 个商品
生产者 生产后 总共有 5 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 5 个商品
消费者 消费后 总共有 4 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 4 个商品
消费者 消费后 总共有 3 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 3 个商品
消费者 消费后 总共有 2 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 2 个商品
消费者 消费后 总共有 1 个商品
---------------------------------------------------------------------------
消费者 消费前 总共有 1 个商品
消费者 消费后 总共有 0 个商品
---------------------------------------------------------------------------
仅此记录