Spec-Zone.ru › OpenJDK 24

Класс 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().
С тех пор:
1.5
См. также:
  • Сериализованная форма

Краткое описание конструкторов

WriteLock(ReentrantReadWriteLock lock)
Модификатор Конструктор Описание
protected
Конструктор для использования подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
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", за которой следует имя владеющей нити.
Overrides:
toString в классе Object
Returns:
строку, идентифицирующую данный замок, а также его состояние

isHeldByCurrentThread

public boolean isHeldByCurrentThread()
Определяет, удерживает ли данный пишущий замок текущая нить. Эквивалентно ReentrantReadWriteLock.isWriteLockedByCurrentThread().
Returns:
true, если текущая нить удерживает данный замок, и false в противном случае
Since:
1.6

getHoldCount

public int getHoldCount()
Возвращает количество удержаний данного пишущего замка текущей нитью. Нить удерживает замок для каждого действия блокировки, которое не сопровождается действием разблокировки. Эквивалентно ReentrantReadWriteLock.getWriteHoldCount().
Returns:
количество удержаний данного замка текущей нитью или ноль, если данный замок не удерживается текущей нитью
Since:
1.6

© 1993, 2025, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html

Spec-Zone.ru

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