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 版本
最新推荐文章于 2024-02-28 08:40:32 发布