Lock.tryLock()的用例

Sab*_*han 6 java concurrency multithreading locking

在方法接口的API文档中,粘贴此代码示例,LocktryLock()

此方法的典型用法习惯是:

  Lock lock = ...;
  if (lock.tryLock()) {
      try {
          // manipulate protected state
      } finally {
          lock.unlock();
      }
  } else {
      // perform alternative actions
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个用例在Java 5之前是不存在的还是人们通过其他技术来实现它?

我无法理解是否需要根据锁定可用性执行替代操作.

有人可以为此解释实际用例吗?

我确信这种技术不是直接替代synchronized编写无死锁代码.

Hol*_*ger 5

一个直接的用例是处理一批元素的线程,偶尔尝试提交已处理的元素。如果获取锁失败,则将在下一次成功尝试或最终强制提交时提交元素。

\n\n

另一个例子可以在 JRE 本身中找到,ForkJoinTask.helpExpungeStaleExceptions()是一种执行任务的方法,该任务可以由任意线程完成,但一次只能执行一个任务,因此只有成功获取锁的一个线程才会执行该任务,所有其他线程都会返回,因为锁不可用意味着已经有一个线程正在执行该任务。

\n\n
\n\n

如果将内部锁定功能(不支持可选)与可表示为普通对象状态的锁定逻辑分开,则可以在 Java\xc2\xa05 之前实现类似的功能。这个答案提供了一个例子。

\n