Spec-Zone.ru › OpenJDK 25

Класс 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()
Предпринимает попытку освободить эту блокировку.

Методы, объявленные в классе 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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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