JavaTM 2 Platform
Standard Ed. 6

java.util.concurrent.locks
類別 ReentrantReadWriteLock.ReadLock

java.lang.Object
  繼承者 java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
所有已實作的介面:
Serializable, Lock
正在封閉類別:
ReentrantReadWriteLock

public static class ReentrantReadWriteLock.ReadLock
extends Object
implements Lock, Serializable

ReentrantReadWriteLock.readLock() 方法返回的鎖。

另請參見:
序列化表格

建構子摘要
protected ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock)
          子類別使用的建構子
 
方法摘要
 void lock()
          獲取讀取鎖。
 void lockInterruptibly()
          獲取讀取鎖,除非當前執行緒被中斷
 Condition newCondition()
          因為 ReadLocks 不支持條件,所以將拋出 UnsupportedOperationException
 String toString()
          返回標識此鎖及其鎖狀態的字元串。
 boolean tryLock()
          僅當寫入鎖在調用期間未被另一個執行緒保持時獲取讀取鎖。
 boolean tryLock(long timeout, TimeUnit unit)
          如果另一個執行緒在給定的等待時間內沒有保持寫入鎖,並且當前執行緒未被中斷,則獲取讀取鎖。
 void unlock()
          試圖釋放此鎖。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

ReentrantReadWriteLock.ReadLock

protected ReentrantReadWriteLock.ReadLock(ReentrantReadWriteLock lock)
子類別使用的建構子

參數:
lock - 外部鎖物件
拋出:
NullPointerException - 如果 lock 為 null
方法詳細資訊

lock

public void lock()
獲取讀取鎖。

如果另一個執行緒沒有保持寫入鎖,則獲取讀取鎖並立即返回。

如果另一個執行緒保持該寫入鎖,出於執行緒排程目的,將禁用當前執行緒,並且在獲取讀取鎖之前,該執行緒將一直處於休眠狀態。

指定者:
介面 Lock 中的 lock

lockInterruptibly

public void lockInterruptibly()
                       throws InterruptedException
獲取讀取鎖,除非當前執行緒被中斷

如果另一個執行緒沒有保持寫入鎖,則獲取讀取鎖並立即返回。

如果另一個執行緒保持了該寫入鎖,出於執行緒排程目的,將禁用當前執行緒,並且在發生以下兩種情況之一以前,該執行緒將一直處於休眠狀態:

如果當前執行緒:

則拋出 InterruptedException,並且清除當前執行緒的已中斷狀態。

在此實作中,因為此方法是一個顯式中斷點,所以要優先考慮回應中斷,而不是回應鎖的普通獲取或重入獲取。

指定者:
介面 Lock 中的 lockInterruptibly
拋出:
InterruptedException - 如果當前執行緒是已中斷的。

tryLock

public boolean tryLock()
僅當寫入鎖在調用期間未被另一個執行緒保持時獲取讀取鎖。

如果另一個執行緒沒有保持寫入鎖,則獲取讀取鎖並立即返回 true 值。即使已將此鎖設置為使用公平排序策略,但是調用 tryLock() 立即獲取讀取鎖(如果有可用的),不管其他執行緒當前是否正在等待該讀取鎖。在某些情況下,此“闖入”行為可能很有用,即使它會打破公平性也如此。如果希望遵守此鎖的公平設置,則使用 tryLock(0, TimeUnit.SECONDS) ,它幾乎是等效的(它也檢測中斷)。

如果寫入鎖被另一個執行緒保持,則此方法將立即返回 false 值。

指定者:
介面 Lock 中的 tryLock
返回:
如果獲取了讀取鎖,則返回 true

tryLock

public boolean tryLock(long timeout,
                       TimeUnit unit)
                throws InterruptedException
如果另一個執行緒在給定的等待時間內沒有保持寫入鎖,並且當前執行緒未被中斷,則獲取讀取鎖。

如果另一個執行緒沒有保持寫入鎖,則獲取讀取鎖並立即返回 true 值。如果已經設置此鎖使用公平的排序策略,並且其他執行緒都在等待該鎖,則不會 獲取一個可用的鎖。這與 tryLock() 方法相反。如果想使用一個允許闖入公平鎖的定時 tryLock,那麼可以將定時形式和不定時形式組合在一起:

if (lock.tryLock() || lock.tryLock(timeout, unit) ) { ... }
 

如果寫入鎖被另一個執行緒保持,則出於執行緒排程目的,禁用當前執行緒,並且在發生以下三種情況之一以前,該執行緒將一直處於休眠狀態:

如果獲得了讀取鎖,則返回 true 值。

如果當前執行緒:

則拋出 InterruptedException,並且清除當前執行緒的已中斷狀態。

如果超出了指定的等待時間,則返回值為 false。如果該時間小於等於 0,則此方法根本不會等待。

在此實作中,因為此方法是一個顯式中斷點,所以要優先考慮回應中斷,而不是回應鎖的普通獲取或重入獲取,或者報告所用的等待時間。

指定者:
介面 Lock 中的 tryLock
參數:
timeou - 等待讀取鎖的時間
unit - timeout 參數的時間單位
返回:
如果獲取了讀取鎖,則返回 true
拋出:
InterruptedException - 如果當前執行緒被中斷
NullPointerException - 如果時間單位為 null

unlock

public void unlock()
試圖釋放此鎖。

如果讀取者的數量目前為 0,則該鎖可用於寫入鎖嘗試。

指定者:
介面 Lock 中的 unlock

newCondition

public Condition newCondition()
因為 ReadLocks 不支持條件,所以將拋出 UnsupportedOperationException

指定者:
介面 Lock 中的 newCondition
返回:
用於此 Lock 實例的新 Condition 實例
拋出:
UnsupportedOperationException - 總是如此

toString

public String toString()
返回標識此鎖及其鎖狀態的字元串。括號中的狀態包括字元串 "Read locks =",後跟讀取鎖的數量。

覆寫:
類別 Object 中的 toString
返回:
標識此鎖及其鎖狀態的字元串。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only