Класс 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, 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