package com.example.demo.test; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; public class Test1 { private volatile int count = 0; private ReentrantLock reentrantLock = new ReentrantLock(); private Condition condition = reentrantLock.newCondition(); public void increament(){ try { reentrantLock.lock(); // 這個用while不用if 防止虛假喚醒 while (count != 0){ condition.await(); } count++; System.out.println("生產"); condition.signalAll(); }catch (Exception e){ e.printStackTrace(); }finally { reentrantLock.unlock(); } } public void decreament(){ try { reentrantLock.lock(); // 這個用while不用if 防止虛假喚醒 while (count == 0){ condition.await(); } count--; System.out.println("消費"); condition.signalAll(); }catch (Exception e){ e.printStackTrace(); }finally { reentrantLock.unlock(); } } public static void main(String[] args) throws Exception{ Test1 t = new Test1(); for (int i=0;i<5;i++){ new Thread(()->{ t.increament(); },"").start(); } TimeUnit.SECONDS.sleep(1); for (int i=0;i<5;i++){ new Thread(()->{ t.decreament(); },"").start(); } } }
生產者消費者ReentrantLock 版本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.