这段代码中的两个线程不交替执行是因为使用了锁(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();


}

}

Java 多线程使用 ReentrantLock 为什么不交替执行

原文地址: https://www.cveoy.top/t/topic/ndao 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录