Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного интервала реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного интервала реального времени.

Подробное описание конструкторов

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(). Если требуется, чтобы timed-вариант 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, 2026, 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.

Spec-Zone.ru

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