【发布时间】:2015-05-08 08:04:38
【问题描述】:
我希望以下测试只打印一次“已锁定”。 但它因此会打印该行。
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(即如果尚未锁定)。但显然情况并非如此。
如何设置这样的锁线程安全?
【问题讨论】:
-
它在while循环中,一旦获得锁,同一个对象再次请求同一个锁,所以它每次都获得锁,它将永远打印
has been locked。 -
这就是它被称为可重入的原因