当同一个线程试图获取它已经拥有的 lock 时会发生什么?
答案 0 :(得分:4)
看看GrepCode。这是一个非常好的起点。代码记录得非常好。它解释得比我好得多。
答案 1 :(得分:2)
我猜你的问题是关于synchronized
块/修饰符的语义。请参阅Java Language Specification。如果您的问题是关于特定实现的方式,那么您需要指定您想到的确切实现。但这是一个众所周知的技术,我没有理由这样做。
答案 2 :(得分:1)
引自http://download.java.net/jdk7/archive/b123/docs/api/java/util/concurrent/locks/ReentrantLock.html
可重入互斥锁具有与使用同步方法和语句访问的隐式>监视器锁相同的基本行为和语义,但具有扩展的>功能。
ReentrantLock由最后成功锁定的线程拥有,但尚未解锁。 >当锁不是由另一个线程拥有时,线程调用锁将返回,成功获取锁。如果当前线程已经>拥有锁,则该方法将立即返回。这可以使用方法isHeldByCurrentThread()和getHoldCount()来检查。
我同意GrepCode非常好地解释