Spec-Zone.ru › OpenJDK 8

Класс 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 WriteLock(ReentrantReadWriteLock lock)

Конструктор для использования подклассами

Методы

Модификатор и тип Метод и описание
int getHoldCount()

Запрашивает количество удержаний этой блокировки записи текущей нитью.

boolean isHeldByCurrentThread()

Определяет, удерживает ли текущая нить эту блокировку записи.

void lock()

Получает блокировку записи.

void lockInterruptibly()

Получает блокировку записи, если текущая нить не прервана.

Condition newCondition()

Возвращает экземпляр Condition для использования с этим экземпляром Lock.

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

Конструкторы

WriteLock

protected WriteLock(ReentrantReadWriteLock lock)

Конструктор для использования подклассами

Параметры:
lock - объект внешнего замка
Исключения:
NullPointerException - если замок равен null

Методы

lock

public void lock()

Получает записьный замок.

Получает записьный замок, если ни чтение, ни запись не удерживаются другой нитью и возвращает его немедленно, устанавливая счетчик удержания записьного замка в единицу.

Если текущая нить уже удерживает записьный замок, то счетчик удержания увеличивается на единицу, и метод возвращает немедленно.

Если замок удерживается другой нитью, то текущая нить отключается для планирования потоков и приостанавливается до тех пор, пока не будет получен записьный замок, в этот момент счетчик удержания записьного замка устанавливается в единицу.

Унаследован от:
lock в интерфейсе Lock

lockInterruptibly

public void lockInterruptibly()
                       throws InterruptedException

Получает записьный замок, если текущая нить не прервана.

Получает записьный замок, если ни чтение, ни запись не удерживаются другой нитью и возвращает его немедленно, устанавливая счетчик удержания записьного замка в единицу.

Если текущая нить уже удерживает этот замок, то счетчик удержания увеличивается на единицу, и метод возвращает немедленно.

Если замок удерживается другой нитью, то текущая нить отключается для планирования потоков и приостанавливается до тех пор, пока не произойдёт одно из двух:

  • Записьный замок получен текущей нитью; или
  • Другая нить прерывает текущую нить.

Если записьный замок получен текущей нитью, то счетчик удержания замка устанавливается в единицу.

Если текущая нить:

  • имеет установленный флаг прерывания при входе в этот метод; или
  • была прервана во время получения записьного замка,
то InterruptedException выбрасывается и флаг прерывания текущей нити сбрасывается.

В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение отдаётся обработке прерывания перед обычным или рекурсивным получением замка.

Унаследован от:
lockInterruptibly в интерфейсе Lock
Исключения:
InterruptedException - если текущая нить прервана

tryLock

public boolean tryLock()

Получает записьный замок только в том случае, если он не удерживается другой нитью в момент вызова.

Получает записьный замок, если ни чтение, ни запись не удерживаются другой нитью и возвращает немедленно значение true, устанавливая счетчик удержания записьного замка в единицу. Даже когда этот замок был настроен для использования политики справедливого упорядочения, вызов tryLock() немедленно получит замок, если он доступен, вне зависимости от того, ожидают ли другие нити записьного замка. Такое "вторжение" может быть полезно в некоторых ситуациях, даже если оно нарушает справедливость. Если вы хотите соблюдать настройку справедливости для этого замка, используйте tryLock(0, TimeUnit.SECONDS) , который почти эквивалентен (он также обнаруживает прерывание).

Если текущая нить уже удерживает этот замок, то счетчик удержания увеличивается на единицу, и метод возвращает true.

Если замок удерживается другой нитью, то этот метод возвращает немедленно значение false.

Унаследован от:
tryLock в интерфейсе Lock
Возвращает:
true если замок был свободен и был получен текущей нитью, или записьный замок уже удерживался текущей нитью; и false в противном случае.

tryLock

public boolean tryLock(long timeout,
                       TimeUnit unit)
                throws InterruptedException

Получает записьный замок, если он не удерживается другой нитью в течение заданного времени ожидания, и текущая нить не была прервана.

Получает записьный замок, если ни чтение, ни запись не удерживаются другой нитью и возвращает немедленно значение true, устанавливая счетчик удержания записьного замка в единицу. Если для этого замка установлена политика справедливого упорядочения, то доступный замок не будет получен, если какие-либо другие нити ожидают записьного замка. Это в отличие от метода tryLock(). Если вам нужен тайм-аут tryLock который разрешает вторжение при справедливом замке, комбинируйте временные и безвременные формы вместе:

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

Если текущая нить уже удерживает этот замок, то счетчик удержания увеличивается на единицу, и метод возвращает true.

Если замок удерживается другой нитью, то текущая нить отключается для планирования потоков и приостанавливается до тех пор, пока не произойдет одно из трёх:

  • Записьный замок получен текущей нитью; или
  • Другая нить прерывает текущую нить; или
  • Заданное время ожидания истекает

Если записьный замок получен, то возвращается значение true и счетчик удержания записьного замка устанавливается в единицу.

Если текущая нить:

  • имеет установленный флаг прерывания при входе в этот метод; или
  • была прервана во время получения записьного замка,
то InterruptedException выбрасывается и флаг прерывания текущей нити сбрасывается.

Если заданное время ожидания истекает, то возвращается значение false. Если время равно или меньше нуля, метод вообще не будет ждать.

В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение отдаётся обработке прерывания перед обычным или рекурсивным получением замка, и перед сообщением об истечении времени ожидания.

Унаследован от:
tryLock в интерфейсе Lock
Параметры:
timeout - время ожидания записьного замка
unit - единица измерения времени тайм-аута
Возвращает:
true если замок был свободен и был получен текущей нитью, или записьный замок уже удерживался текущей нитью; и false если время ожидания истекло до получения замка.
Исключения:
InterruptedException - если текущая нить прервана
NullPointerException - если единица измерения времени равна null

unlock

public void unlock()

Попытка освободить этот замок.

Если текущая нить является держателем этого замка, то счетчик удержания уменьшается. Если счетчик удержания теперь равен нулю, то замок освобождается. Если текущая нить не является держателем этого замка, то выбрасывается IllegalMonitorStateException.

Унаследован от:
unlock в интерфейсе Lock
Исключения:
IllegalMonitorStateException - если текущая нить не удерживает этот замок

newCondition

public Condition newCondition()

Возвращает экземпляр Condition для использования с этим экземпляром Lock.

Возвращённый экземпляр Condition поддерживает те же использования, что и методы монитора Object (wait, notify и notifyAll) при использовании встроенного мониторного замка.

  • Если этот записьный замок не удерживается, когда вызывается любой метод Condition, то выбрасывается IllegalMonitorStateException. (Чтение замки удерживаются независимо от записьных замков, поэтому не проверяются и не затрагиваются. Однако фактически всегда ошибка вызывать метод ожидания условия, когда текущая нить также приобрела чтение замков, поскольку другие нити, которые могли бы его разблокировать, не смогут получить записьный замок.)
  • Когда вызываются методы ожидания условия ожидания, записьный замок освобождается и, перед возвратом, записьный замок вновь приобретается и счетчик удержания замка восстанавливается до значения, которое он имел при вызове метода.
  • Если нить прерывается во время ожидания, то ожидание завершится, будет выброшено InterruptedException, и флаг прерывания нити будет сброшен.
  • Ожидающие нити сигнализируются в порядке FIFO.
  • Порядок повторного приобретения замка для нитей, возвращающихся из методов ожидания, такой же, как для нитей, изначально приобретающих замок, который в стандартном случае не указан, но для справедливых замков отдаёт предпочтение тем нитям, которые ожидают дольше всего.
Унаследован от:
newCondition в интерфейсе Lock
Возвращает:
объект Condition

toString

public String toString()

Возвращает строку, идентифицирующую этот замок, а также его состояние. Состояние в скобках содержит либо строку "Unlocked" , либо строку "Locked by" , за которой следует имя владеющей нити.

Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую этот замок, а также его состояние

isHeldByCurrentThread

public boolean isHeldByCurrentThread()

Запрашивает, удерживается ли этот записьный замок текущей нитью. Идентичен по действию ReentrantReadWriteLock.isWriteLockedByCurrentThread().

Возвращает:
true если текущая нить удерживает этот замок, и false в противном случае
С тех пор как:
1.6

getHoldCount

public int getHoldCount()

Запрашивает количество удержаний этого записьного замка текущей нитью. Нить удерживает замок для каждого действия блокировки, которое не соответствует действию разблокировки. Идентичен по действию ReentrantReadWriteLock.getWriteHoldCount().

Возвращает:
количество удержаний этого замка текущей нитью, или ноль, если этот замок не удерживается текущей нитью
С тех пор как:
1.6

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API