Java 1.4中Lock.tryLock()的替代方法

Java 1.4中Lock.tryLock()的替代方法,第1张

Java 1.4中Lock.tryLock()的替代方法

如果需要

Lock
支持
tryLock
*** 作,则不能使用Java的固有锁定功能。您必须实现自己的
Lock
类,该类维护所需的状态,即所有者
Thread
和计数器,并可能使用内在锁定来实现其线程安全更新和阻止(在较早的Java版本中没有太多替代方法)。

一个非常简单的实现可能看起来像这样:

public final class Lock {  private Thread owner;  private int nestCount;  public synchronized void lock() throws InterruptedException {    for(;;) {      if(tryLock()) return;      wait();    }  }  public synchronized boolean tryLock() {    Thread me=Thread.currentThread();    if(owner!=me) {      if(nestCount!=0) return false;      owner=me;    }    nestCount++;    return true;  }  public synchronized void unlock() {    if(owner!=Thread.currentThread())      throw new IllegalMonitorStateException();    if(--nestCount == 0) {      owner=null;      notify();    }  }}

请注意,方法

Lock
强制实施的实例的固有锁定
synchronized
仅在很短的时间内保持。线程将立即返回或进入
wait
暗示释放锁的状态。因此
tryLock
,尽管Java
5和更新版本的Java 5可能会更有效,但它们将表现出所需的行为。(Java 5和更高版本的实现
synchronized
也更加有效…)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5507198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存