Java 多线程中只有一个线程执行的原因:Lock 锁的使用
这段代码中只有一个线程执行是因为在'drink()'方法中使用了'Lock'锁,通过'lock.lock()'和'lock.unlock()'方法对'num'进行了加锁和解锁操作。当一个线程在执行'drink()'方法时,首先会尝试获取锁,如果获取成功则执行代码块中的内容,否则会一直等待直到获取锁为止。因此,在这段代码中,当一个线程获取到'Lock'锁时,另一个线程就无法获取锁,只能等待获取锁的线程释放锁后才能执行'drink()'方法。因此,只有一个线程执行。
解释:
Lock接口提供了一种比 synchronized 关键字更灵活的锁机制。ReentrantLock是Lock接口的一个实现,它允许一个线程多次获取同一个锁,而不会发生死锁。- 在这段代码中,
drink()方法被Lock锁保护,这意味着同一时间只有一个线程可以执行该方法。
结论:
使用 Lock 锁可以确保线程安全,但也会导致线程的串行执行。在某些情况下,这可能是我们想要的结果,但在其他情况下,我们需要使用其他同步机制来实现并发执行。
原文地址: https://www.cveoy.top/t/topic/ndat 著作权归作者所有。请勿转载和采集!