JavaTM 2 Platform
Standard Ed. 6

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

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

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

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

另請參見:
序列化表格

建構子摘要
protected ReentrantReadWriteLock.WriteLock(ReentrantReadWriteLock lock)
          子類別使用的建構子
 
方法摘要
 int getHoldCount()
          查詢當前執行緒保持寫入鎖的數量。
 boolean isHeldByCurrentThread()
          查詢此寫入鎖是否由當前執行緒保持。
 void lock()
          獲取寫入鎖。
 void lockInterruptibly()
          獲取寫入鎖,除非當前執行緒被中斷
 Condition newCondition()
          返回一個用來與此 Lock 實例一起使用的 Condition 實例。
 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.WriteLock

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

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

lock

public void lock()
獲取寫入鎖。

如果另一個執行緒既沒有保持讀取鎖也沒有保持寫入鎖,則獲取寫入鎖並立即返回,並將寫入鎖保持計數設置為 1。

如果當前執行緒已經保持寫入鎖,則保持計數增加 1,該方法立即返回。

如果該鎖被另一個執行緒保持,出於執行緒排程的目的,將禁用當前執行緒,並且在獲得寫入鎖之前,該執行緒將一直處於休眠狀態,此時寫入鎖保持計數設置為 1。

指定者:
介面 Lock 中的 lock

lockInterruptibly

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

如果另一個執行緒既沒有保持讀取鎖也沒有保持寫入鎖,則獲取寫入鎖並立即返回,並將寫入鎖保持計數設置為 1。

如果當前執行緒已經保持此鎖,則將保持計數加 1,該方法立即返回。

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

如果當前執行緒獲得寫入鎖,則將鎖保持計數設置為 1。

如果當前執行緒:

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

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

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

tryLock

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

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

如果當前執行緒已經保持此鎖,則將保持計數加 1,該方法將返回 true

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

指定者:
介面 Lock 中的 tryLock
返回:
如果鎖是自由的並且被當前執行緒獲取,或者當前執行緒已經保持寫入鎖,則返回 true;否則返回 false

tryLock

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

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

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

如果當前執行緒已經保持此鎖,則將保持計數加 1,該方法將返回 true

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

如果獲取了寫入鎖,則返回 true 值,並將寫入鎖保持計數設置為 1。

如果當前執行緒:

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

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

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

指定者:
介面 Lock 中的 tryLock
參數:
timeou - 等待寫入鎖的時間
unit - timeout 參數的時間單位
返回:
如果鎖是自由的並且由當前執行緒獲取,或者當前執行緒已經保持寫入鎖,則返回 true;如果在獲取該鎖之前已經到達等待時間,則返回 false
拋出:
InterruptedException - 如果當前執行緒被中斷
NullPointerException - 如果時間單位為 null

unlock

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

如果當前執行緒保持此鎖,則將保持計數減 1。如果保持計數現在為 0,則釋放該鎖。如果當前執行緒不是此鎖的持有者,則拋出 IllegalMonitorStateException

指定者:
介面 Lock 中的 unlock
拋出:
IllegalMonitorStateException - 如果當前執行緒沒有保持此鎖。

newCondition

public Condition newCondition()
返回一個用來與此 Lock 實例一起使用的 Condition 實例。

在使用內置監視器鎖時,返回的 Condition 實例支持與 Object 的監視器方法(waitnotifynotifyAll)相同的用法。

指定者:
介面 Lock 中的 newCondition
返回:
Condition 物件

toString

public String toString()
返回標識此鎖及其鎖狀態的字元串。該狀態括在括號中,它包括字元串 "Unlocked" 或字元串 "Locked by",後跟所擁有執行緒的名稱

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

isHeldByCurrentThread

public boolean isHeldByCurrentThread()
查詢此寫入鎖是否由當前執行緒保持。與 ReentrantReadWriteLock.isWriteLockedByCurrentThread() 效果相同。

返回:
如果當前執行緒保持此鎖,則返回 true;否則返回 false
從以下版本開始:
1.6

getHoldCount

public int getHoldCount()
查詢當前執行緒保持寫入鎖的數量。對於與解鎖操作不比對的每個鎖操作,執行緒都會為其保持一個鎖。與 ReentrantReadWriteLock.getWriteHoldCount() 效果相同。

返回:
當前執行緒保持的鎖數量,如果當前執行緒沒有保持此鎖,則返回 0
從以下版本開始:
1.6

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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