栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
也更加有效…)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号