我希望以下测试仅打印“已被锁定”一次。但是它因此会打印行。
public class LocKTest { @Test public void testLock() { Lock lock = new ReentrantLock(); while (true) { if (lock.tryLock()) { //lock.lock(); same result if I include an explicit lock here System.out.println("has been locked"); } } } }
据我了解,tryLock将在ReentrantLock可能的情况下将其锁定(即,如果尚未锁定)。但是显然不是这样。
tryLock
ReentrantLock
如何设置这样的锁线程安全?
名称为ReentrantLock,表示re-enter您已经拥有锁了。
re-enter
如果希望使用线程块,则可以使用例如Semaphore具有1(或更多)许可的a。
Semaphore