Java 多线程使用 ReentrantLock 为什么不交替执行
这段代码中的两个线程不交替执行是因为使用了锁(ReentrantLock)来保证线程安全,当一个线程获取到锁之后,另一个线程必须等待该线程释放锁之后才能获取锁执行。因此,当一个线程获取到锁并开始执行'drink()'方法时,另一个线程必须等待该线程执行完之后才能获取锁执行'drink()'方法。这就导致了两个线程无法交替执行。
package com.xsd.demo1;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;
/**
-
@author :谢少迪
-
@description:
-
@date :Created in 2023-04-07 21:13 */ public class test02 { public static void main(String[] args) {
water water = new water(); new Thread(()->{ for (int i = 0; i <40; i++) { water.drink(); } },"林一").start(); new Thread(()->{ for (int i = 0; i <40; i++) { water.drink(); } },"林二").start();}
} class water{ private Integer num = 40; Lock lock = new ReentrantLock();
public void drink(){
lock.lock();
if(num>0){
System.out.println(Thread.currentThread().getName()+"喝了第"+num+"杯水,还剩"+(num-1));
num--;
}
lock.unlock();
}
}
原文地址: https://www.cveoy.top/t/topic/ndao 著作权归作者所有。请勿转载和采集!