Spec-Zone.ru › OpenJDK 17

Класс 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, 2021, 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/17/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html

Spec-Zone.ru

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