Spec-Zone.ru › OpenJDK 21

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

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

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" , за которой следует имя владеющей нити.
Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую эту блокировку, а также её состояние блокировки

isHeldByCurrentThread

public boolean isHeldByCurrentThread()
Запрашивает, удерживает ли текущий поток этот блокирующий механизм записи. Идентично ReentrantReadWriteLock.isWriteLockedByCurrentThread().
Возвращает:
true если текущий поток удерживает этот блокирующий механизм, и false в противном случае
С:
1.6

getHoldCount

public int getHoldCount()
Запрашивает количество удержаний этого блокирующего механизма записи текущим потоком. Поток удерживает блокировку для каждого действия блокировки, которое не скомпенсировано действием разблокировки. Идентично ReentrantReadWriteLock.getWriteHoldCount().
Возвращает:
количество удержаний этой блокировки текущим потоком или ноль, если текущий поток не удерживает эту блокировку
С:
1.6

© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html

Spec-Zone.ru

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