java8的JDK文档------Tutorial - Concurrency Lesson---Lock Objects
锁定对象
同步代码依赖于一种简单的可重入锁。这种锁易于使用,但有很多局限性。java.util.concurrent.locks 包支持更复杂的锁定习惯。我们不会详细研究这个包,而是专注于它最基本的界面 Lock。
锁对象的工作方式非常类似于同步代码使用的隐式锁。与隐式锁一样,一次只有一个线程可以拥有 Lock 对象。锁定对象还通过其关联的条件对象支持等待/通知机制。
与隐式锁相比,Lock 对象的最大优势是它们能够退出获取锁的尝试。如果锁不能立即可用或在超时到期(如果指定)之前,tryLock 方法将回退。如果另一个线程在获取锁之前发送中断,则 lockInterruptibly 方法将退出。
让我们使用 Lock 对象来解决我们在 Liveness 中看到的死锁问题。艾尔冯斯和加斯顿已经训练自己注意朋友何时要鞠躬。我们通过要求我们的 Friend 对象在继续弓之前必须为两个参与者获取锁来模拟这种改进。以下是改进模型 Safelock 的源代码。为了证明这个成语的多功能性,我们假设阿尔方斯和加斯顿非常迷恋他们新发现的安全鞠躬能力,以至于他们无法停止向对方鞠躬。
下面是文档的原文截图:
此文档的内容主要摘自JDK8的文档