在 API docs的 Lock
方法接口(interface) tryLock()
,粘贴此代码示例,
A typical usage idiom for this method would be:
Lock lock = ...; if (lock.tryLock()) { try { // manipulate protected state } finally { lock.unlock(); } } else { // perform alternative actions }
我的问题是,这个用例在 Java 5 之前是否不存在,或者人们曾经通过其他一些技术来实现它?
我无法理解需要执行 执行替代操作 基于锁的可用性。
有人可以解释一下实际用例吗?
我确信这种技术不是
synchronized
的直接替代品编写无死锁的代码。
最佳答案
一个简单的用例是一个线程处理一批元素,偶尔尝试提交已处理的元素。如果获取锁失败,元素将在下一次成功尝试或最终强制提交时提交。
另一个示例可以在 JRE 本身中找到, ForkJoinTask.helpExpungeStaleExceptions()
是一种执行可以由任意线程完成的任务的方法,但一次只能执行一个任务,因此只有成功获取锁的一个线程会执行它,所有其他线程都会返回,因为锁不可用意味着有已经是一个执行任务的线程。
如果将不支持可选的内在锁定功能与可以表示为普通对象状态的锁定逻辑分开,则可以在 Java 5 之前实现类似的功能。 This answer提供了一个例子。
关于java - Lock.tryLock() 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788074/