生產消費_lock和阻塞佇列
阿新 • • 發佈:2021-09-10
lock
- 這裡的lock只需要一把鎖
因為同時還要配合狀態 一起決定 - 一定要在try裡面用 一定要unlock
public class Test { public static void main(String[] args) { //傳統版本 AirConditional airConditional = new AirConditional(); new Thread(()->{ for (int i = 0; i < 5; i++) { airConditional.produce(); } }).start(); new Thread(()->{ for (int i = 0; i < 5; i++) { airConditional.consume(); } }).start(); } } class AirConditional{ int temp ; Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void produce(){ try { lock.lock(); while( temp != 0){ condition.await(); } temp++; System.out.println("生產後為"+temp); condition.signalAll(); }catch (Exception e){ } finally { lock.unlock(); } } public void consume(){ try { lock.lock(); while( temp != 1){ condition.await(); } temp--; System.out.println("消費後為"+temp); condition.signalAll(); }catch (Exception e){ } finally { lock.unlock(); } } }