jay*_*100 3 java multithreading locking reentrancy
我注意到以下代码块:
final Lock s = new ReentrantLock();
for(int i = 0 ; i < 1000 ; i++)
{
s.lock();
System.out.println(i+" :" +s.tryLock()+" ");
}
Run Code Online (Sandbox Code Playgroud)
印刷品:
0 :true
1 :true
2 :true
3 :true
...
Run Code Online (Sandbox Code Playgroud)
这很奇怪 - 我希望连续的锁失败,因为s永远不会被解锁.
这里有什么不好意思吗?
我打赌你是从同一个线程一遍又一遍地锁定它.在这种情况下,线程已经拥有锁,因此成功获取锁(因为甚至不必获取锁).
ReentrantLock由最后成功锁定的线程拥有,但尚未解锁.当锁不是由另一个线程拥有时,线程调用锁将返回,成功获取锁.如果当前线程已拥有锁,则该方法将立即返回.这可以使用方法isHeldByCurrentThread()和getHoldCount()来检查.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html