【发布时间】:2012-03-07 22:04:46
【问题描述】:
我注意到以下代码块:
final Lock s = new ReentrantLock();
for(int i = 0 ; i < 1000 ; i++)
{
s.lock();
System.out.println(i+" :" +s.tryLock()+" ");
}
打印:
0 :true
1 :true
2 :true
3 :true
...
这很奇怪 - 我希望连续的锁失败,因为 s 永远不会解锁。
这里有什么见解吗?
【问题讨论】:
-
您是否阅读过 ReentrantLock 的文档? docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/…
-
线索就在名字里:reentrant
-
所有锁都是在同一个线程中获取的,所以是正确的。这就是 ReentrantLock 的设计。当您尝试在其他线程中锁定时,它将是错误的
标签: java multithreading locking reentrancy