javatm platform
standard ed. 6

java.util.concurrent.locks
类 reentrantreadwritelock

java.lang.object 继承者 java.util.concurrent.locks.reentrantreadwritelock
所有《suǒ yǒu》已实现的接口:
serializable, readwritelock

public class reentrantreadwritelock
extends object
implements readwritelock, serializable

支持《support》与 reentrantlock 类似语义的 readwritelock 实现。

此类具有以下属性:

此类行为的序列化方式与内置锁的相同:反序列化的锁处于解除锁状态,无论序列化该锁时其状态如何《how》。

示例用法。下面的代码展示了如何《how》利用重入来执行升级缓存后的锁降级(为简单起见,省略了异常处理):

 class cacheddata {  object data;  volatile boolean cachevalid;  reentrantreadwritelock rwl=new reentrantreadwritelock();  void processcacheddata() { rwl.readlock().lock(); if (!cachevalid) {  // must release read lock before acquiring write lock  rwl.readlock().unlock();  rwl.writelock().lock();  // recheck state because another thread might have acquired  //  write lock and changed state before we did.  if (!cachevalid) {   data=...   cachevalid=true;  }  // downgrade by acquiring read lock before releasing write lock  rwl.readlock().lock();  rwl.writelock().unlock(); // unlock write, still hold read } use(data); rwl.readlock().unlock();  } } 
在使用某些种类的 collection 时,可以使用 reentrantreadwritelock 来提高并发性。通常,在预期 collection 很大,读取者线程访问《visit》它的次数多于写入者线程,并且 entail 操作的开销高于同步开销时,这很值得一试。例如,以下是一个使用 treemap 的类,预期它很大,并且能被同时访问。
class rwdictionary {  private final map<string, data> m=new treemap<string, data>();  private final reentrantreadwritelock rwl=new reentrantreadwritelock();  private final lock r=rwl.readlock();  private final lock w=rwl.writelock();  public data get(string key) {  r.lock();  try { return m.get(key); }  finally { r.unlock(); }  }  public string[] allkeys() {  r.lock();  try { return m.keyset().toarray(); }  finally { r.unlock(); }  }  public data put(string key, data value) {  w.lock();  try { return m.put(key, value); }  finally { w.unlock(); }  }  public void clear() {  w.lock();  try { m.clear(); }  finally { w.unlock(); }  } }

实现注意《zhù yì》事项:

此锁最多支持 65535 个递归写入锁和 65535 个读取锁。试图超出这些限制将导致锁方法抛出 error

从以下版本开始《kāi shǐ》:
1.5
另请参见:
序列化表格

嵌套类摘要
static classreentrantreadwritelock.readlock
          readlock() 方法返回的锁。
static classreentrantreadwritelock.writelock
          writelock() 方法返回的锁。
 
构造方法摘要
reentrantreadwritelock()
          使用默认(非公平)的排序属性创建一个新的 reentrantreadwritelock
reentrantreadwritelock(boolean fair)
          使用给定的公平策略创建一个新的 reentrantreadwritelock
 js随机数
方法摘要
protected  threadgetowner()
          返回当前拥有写入锁的线程,如果没有这样《then》的线程,则返回 null
protected  collection<thread>getqueuedreaderthreads()
          返回一个 collection,它包含可能正在等待获取读取锁的线程。
protected  collection<thread>getqueuedthreads()
          返回一个 collection,它包含可能正在等待获取读取或写入锁的线程。
protected  collection<thread>getqueuedwriterthreads()
          返回一个 collection,它包含可能正在等待获取写入锁的线程。
 intgetqueuelength()
          返回等待获取读取或写入锁的线程估计数目。
 intgetreadholdcount()
          查询当前线程在此锁上保持的重入读取锁数量。
 intgetreadlockcount()
          查询为此锁保持的读取锁数量。
protected  collection<thread>getwaitingthreads(condition condition)
          返回一个 collection,它包含可能正在等待与写入锁相关的给定条件的那些线程。
 intgetwaitqueuelength(condition condition)
          返回正等待与写入锁相关的给定条件的线程估计数目。
 intgetwriteholdcount()
          查询当前线程在此锁上保持的重入写入锁数量。
 booleanhasqueuedthread(thread thread)
          查询是否给定线程正在等待获取读取或写入锁。
 booleanhasqueuedthreads()
          查询是否所有的线程正在等待获取读取或写入锁。
 booleanhaswaiters(condition condition)
          查询是否有些线程正在等待与写入锁有关的给定条件。
 booleanisfair()
          如果此锁将公平性设置为 ture,则返回 true
 booleaniswritelocked()
          查询是否某个线程保持了写入锁。
 booleaniswritelockedbycurrentthread()
          查询当前线程是否保持了写入锁。
 reentrantreadwritelock.readlockreadlock()
          返回用于读取操作的锁。
 stringtostring()
          返回标识此锁及其锁状态的字符串。
 reentrantreadwritelock.writelockwritelock()
          返回用于写入操作的锁。
 
从类 java.lang.object 继承的方法
clone, equals, finalize, getclass, hashcode, notify, notifyall, wait, wait, wait
 

北京市台办相关负责《Responsible》人赶往失联者亲属家中探望慰问,说明花莲地震当前最新消息,并详细了解亲属当前需要协调解决《settle》的困难
留住人才《rén cái》!其中,手机大厂华为传出,将在东莞《Dongguan》松山湖基地建成3万间新房,只限员工租购,价格《jià gé》是每平方公尺8500元(人民币,下同),是周边2万5000元均价的三分之一;格力电器也提供8万名员工2房1厅的房子,董事长董明珠更说,
而今年2018年,祖克柏的新年新希望《hope》,就是要阻止脸书被别有心机者滥用成传递假讯息跟仇恨言论的工具,确保人类可以远离虐待和憎恶的氛围,也避免国家的自由跟民主被其他《qí tā》国家干涉,这可是网路大亨的新年新希望《hope》,果然与众不同
因为消费者都会集中?窆海?淮罂赡苋ツ掣錾坛≈宦蛞恍⊙?东西,又跑去几公里外另一间百货公司挑个小饰品
构造方法详细小秅ǎn》畔

reentrantreadwritelock

public reentrantreadwritelock()
使用默认(非公平)的排序属性创建一个新的 reentrantreadwritelock


reentrantreadwritelock

public reentrantreadwritelock(boolean fair)
使用给定的公平策略创建一个新的 reentrantreadwritelock

参数:
fair - 如果此锁应该《yīng gāi》使用公平排序策略,则该参数的值为 true
方法详细信息

writelock

public reentrantreadwritelock.writelock writelock()
从接口 readwritelock 复制的描述
返回用于写入操作的锁。

指定者:
接口 readwritelock 中的 writelock
返回:
用于写入操作的锁。

readlock

public reentrantreadwritelock.readlock readlock()
从接口 readwritelock 复制的描述
返回用于读取操作的锁。

指定者:
接口 readwritelock 中的 readlock
返回:
用于读取操作的锁。

isfair

public final boolean isfair()
如果此锁将公平性设置为 ture,则返回 true

返回:
如果此锁将公平性设置为 ture,则返回 true

getowner

protected thread getowner()
返回当前拥有写入锁的线程,如果没有这样《then》的线程,则返回 null。当通过不是所有者的线程调用此方法时,返回值反映当前锁状态的最接近近似值。例如,即使存在试图获得锁的线程,但是在它还没有获得前,所有者可能暂时为 null。设计此方法是为了便于构造提供更多扩展的锁监视设施的子类。

返回:
所有者;如果没有所有者,则返回 null

getreadlockcount

public int getreadlockcount()
查询为此锁保持的读取锁数量。此方法设计用于监视系统状态,而不是同步控制。

返回:
所保持的读取锁数量。

iswritelocked

public boolean iswritelocked()
查询是否某个线程保持了写入锁。此方法设计用于监视系统状态,而不是同步控制。

返回:
如果某个线程保持写入锁,则返回 true;否则返回 false

iswritelockedbycurrentthread

public boolean iswritelockedbycurrentthread()
查询当前线程是否保持了写入锁。

返回:
如果当前线程保持写入锁,则返回 true;否则返回 false

getwriteholdcount

public int getwriteholdcount()
查询当前线程在此锁上保持的重入写入锁数量。对于与解除锁操作不匹配的每个锁操作,writer 线程都会为其保持一个锁。

返回:
当前线程保持的写入锁数量,如果当前线程从未保持过写入锁,则返回 0

getreadholdcount

public int getreadholdcount()
查询当前线程在此锁上保持的重入读取锁数量。对于与解除锁操作不匹配的每个锁操作,reader 线程都会为其保持一个锁。

返回:
当前线程保持的读取锁数量;如果当前线程从未保持过读取锁,则返回 0
从以下版本开始《kāi shǐ》:
1.6

getqueuedwriterthreads

protected collection<thread> getqueuedwriterthreads()
返回一个 collection,它包含可能正在等待获取写入锁的线程。因为在构成此结果的同时,实际的线程 set 可能不断发生《occasionally occurred》变化,所以返回的 collection 仅是尽力而为获得的估计值。所返回 collection 的元素没有特定的顺序。设计此方法是为了便于构造提供更多扩展的锁监视器设施的子类。

返回:
线程的 collection

getqueuedreaderthreads

protected collection<thread> getqueuedreaderthreads()
返回一个 collection,它包含可能正在等待获取读取锁的线程。因为在构成此结果的同时,实际的线程 set 可能不断发生《occasionally occurred》变化,所以返回的 collection 仅是尽力而为获得的估计值。所返回 collection 的元素没有特定的顺序。设计此方法是为了便于构造提供更多扩展的锁监视器设施的子类。

返回:
线程的 collection

hasqueuedthreads

public final boolean hasqueuedthreads()
查询是否所有的线程正在等待获取读取或写入锁。注意,因为随时可能发生取消操作,所以返回 true 并不保证任何其他线程将获取锁。此方法主要《main》用于监视系统状态。

返回:
如果有其他线程正等待获取锁,则返回 true

hasqueuedthread

public final boolean hasqueuedthread(thread thread)
查询是否给定线程正在等待获取读取或写入锁。注意,因为随时可能发生取消操作,所以返回 true 并不保证此线程将获取锁。此方法主要《main》用于监视系统状态。

js随机数
参数:
thread - 线程
返回:
如果将给定的线程加入等待此锁的队列,则返回 true
抛出:
nullpointerexception - 如果线程为 null

getqueuelength

public final int getqueuelength()
返回等待获取读取或写入锁的线程估计数目。因为在此方法遍历内部数据结构时,可以动态地更改线程数,所以该值只能是一个估计值。此方法设计用于监视系统状态,而不是同步控制。

返回:
正在等待此锁的线程估计数目

getqueuedthreads

protected collection<thread> getqueuedthreads()
返回一个 collection,它包含可能正在等待获取读取或写入锁的线程。因为在构造此结果的同时,实际的线程 set 可能不断发生变化,所以返回的 collection 仅是尽力而为获得的估计值。所返回 collection 中的元素没有特定的顺序。此方法用于加快子类的构造速度《 dù》,提供更多的监视设施。

返回:
线程的 collection

haswaiters

public boolean haswaiters(condition condition)网站地图  手机端
查询是否有些线程正在等待与写入锁有关的给定条件。注意,因为随时可能发生超时和中断,所以返回 true 并不保证将来某个 signal 将唤醒任何线程。此方法主要用于监视系统状态。

参数:
condition - 条件
返回:
如果有等待的线程,则返回 true
抛出:
illegalmonitorstateexception - 如果没有保持此锁
illegalargumentexception - 如果给定的条件与此锁无关
nullpointerexception - 如果条件为 null

getwaitqueuelength

public int getwaitqueuelength(condition condition)
返回正等待与写入锁相关的给定条件的线程估计数目。注意,因为随时可能发生超时和中断,所以只能将估计值作为实际等待线程数的上限。此方法设计用于监视系统状态,而不是同步控制。

参数:
condition - 条件
返回:
等待线程的估计数
抛出:
illegalmonitorstateexception - 如果没有保持此锁
illegalargumentexception - 如果给定的条件与此锁无关
nullpointerexception - 如果条件为 null

getwaitingthreads

protected collection<thread> getwaitingthreads(condition condition)
返回一个 collection,它包含可能正在等待与写入锁相关的给定条件的那些线程。因为在构造此结果的同时,实际的线程 set 可能不断发生变化,所以返回的 collection 仅是尽力而为获得的估计值。所返回 collection 中的元素没有特定的顺序。此方法用于加快子类的构造速度《 dù》,提供更多的条件监视设施。

参数:
condition - 条件
返回:
线程的 collection
抛出:
illegalmonitorstateexception - 如果没有保持此锁
illegalargumentexception - 如果给定 condition 与此锁无关
nullpointerexception - 如果条件为 null

tostring

public string tostring()
返回标识此锁及其锁状态的字符串。该状态括在括号中,它包括《included》字符串 "write locks=",后跟重入保持写入锁的数目,然后是字符串 "read locks=",后跟所保持读取锁的数目。

覆盖:
object 中的 tostring
返回:
标识此锁及其锁状态的字符串

javatm platform
standard ed. 6

提交错误或意见《remark》
有关更多的 api 参考资料和开发《kāi fā》人员文档,请参阅 java se 开发《kāi fā》人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作《gōng zuò》代码示例。

版权所有 2007 sun microsystems, inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策