因此,如果当前线程再次获取锁,可重入锁会将计数加一。我无法理解的是为什么以及这如何帮助或使我们受益?
最佳答案
可重入锁执行此操作的原因是不会再次锁定已获取此锁的同一线程。
例如:假设线程 A 正在获取可重入锁 A。线程 B 尝试获取锁 A,这将导致线程 B 被阻塞(有关线程状态的更多信息,请参阅 here )。现在,线程 A 正在尝试(再次)获取锁 A。
由于可重入锁现在增加其计数,因此线程 A 不会被阻塞。线程 A 仍然可以访问锁并可以继续(锁存储有关深度的信息)。如果他(迟早)释放锁,计数将再次降低,以检查线程 A 是否仍然需要锁。如果计数为0,则意味着线程A每次获取锁时都已释放,线程B将获得对锁的访问权。
如果没有重入,您现在将拥有 deadlock 。为什么?因为线程 A 拥有锁并且会等待再次获取它。
<小时/>并发可能非常复杂,reentrancy有助于(只是一点点)降低这种复杂性。
关于java - 当我们已经拥有锁时,再次锁定可重入锁有何帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52097727/