Класс ReentrantReadWriteLock.WriteLock
- Все реализованные интерфейсы:
-
Serializable,Lock
- Вложенный класс:
ReentrantReadWriteLock
public static class ReentrantReadWriteLock.WriteLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.writeLock().- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
getHoldCount() |
Определяет количество удержаний этой блокировки записи текущим потоком. |
boolean |
isHeldByCurrentThread() |
Определяет, удерживается ли эта блокировка записи текущим потоком. |
void |
lock() |
Получает блокировку записи. |
void |
lockInterruptibly() |
Получает блокировку записи, если текущий поток не был прерван. |
Condition |
newCondition() |
|
String |
toString() |
Возвращает строку, идентифицирующую эту блокировку, а также состояние блокировки. |
boolean |
tryLock() |
Получает блокировку записи только в том случае, если она не удерживается другим потоком в момент вызова. |
boolean |
tryLock |
Получает блокировку записи, если она не удерживается другим потоком в течение заданного времени ожидания и текущий поток не был прерван. |
void |
unlock() |
Попытка освободить эту блокировку. |
Подробное описание конструкторов
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