一尘不染

如何使用ReentrantLock锁定?

java

我希望以下测试仅打印“已被锁定”一次。但是它因此会打印行。

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可能的情况下将其锁定(即,如果尚未锁定)。但是显然不是这样。

如何设置这样的锁线程安全?


阅读 320

收藏
2020-12-03

共1个答案

一尘不染

名称为ReentrantLock,表示re-enter您已经拥有锁了。

如果希望使用线程块,则可以使用例如Semaphore具有1(或更多)许可的a。

2020-12-03