gpt4 book ai didi

java - Lock.tryLock() 的用例

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:50 25 4
gpt4 key购买 nike

API docs方法tryLock()Lock接口(interface),粘贴此代码示例,

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com