Класс ReentrantReadWriteLock.ReadLock
- Все реализованные интерфейсы:
-
Serializable,Lock
- Вложенный класс:
ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.readLock().- С:
- 1.5
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
lock() |
Приобретает блокировку для чтения. |
void |
lockInterruptibly() |
Приобретает блокировку для чтения, если текущий поток не прерван. |
Condition |
newCondition() |
Выбрасывает UnsupportedOperationException, так как ReadLocks не поддерживают условия. |
String |
toString() |
Возвращает строку, идентифицирующую эту блокировку, а также её состояние. |
boolean |
tryLock() |
Приобретает блокировку для чтения, только если в момент вызова блокировка для записи не удерживается другим потоком. |
boolean |
tryLock |
Приобретает блокировку для чтения, если блокировка для записи не удерживается другим потоком в течение заданного времени ожидания и текущий поток не прерван. |
void |
unlock() |
Пытается освободить эту блокировку. |
Подробное описание конструкторов
ReadLock
protected ReadLock(ReentrantReadWriteLock lock)
- Параметры:
-
lock- объект внешней блокировки - Исключения:
-
NullPointerException- если блокировка равна null
Подробное описание методов
lock
public void lock()
Приобретает блокировку чтения, если запись блокировки не удерживается другой нитью, и возвращается немедленно.
Если запись блокировки удерживается другой нитью, то текущая нить отключается для планирования нитей и находится в спящем режиме до тех пор, пока блокировка чтения не будет приобретена.
lockInterruptibly
public void lockInterruptibly() throws InterruptedException
Приобретает блокировку чтения, если запись блокировки не удерживается другой нитью, и возвращается немедленно.
Если запись блокировки удерживается другой нитью, то текущая нить отключается для планирования нитей и находится в спящем режиме до тех пор, пока не произойдёт одно из двух:
- Блокировка чтения приобретена текущей нитью; или
- Другая нить прерывает текущую нить.
Если текущая нить:
- имеет свой статус прерывания установленным при входе в этот метод; или
- была прервана во время приобретения блокировки чтения,
InterruptedException, а статус прерывания текущей нити сбрасывается. В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение отдаётся реагированию на прерывание по сравнению с нормальным или повторным приобретением блокировки.
- Указано:
-
lockInterruptiblyв интерфейсеLock - Исключения:
-
InterruptedException- если текущая нить прервана
tryLock
public boolean tryLock()
Приобретает блокировку чтения, если блокировка записи не удерживается другой нитью, и возвращает немедленно значение true. Даже если эта блокировка настроена для использования политики справедливого упорядочения, вызов tryLock() немедленно приобретёт блокировку чтения, если она доступна, независимо от того, ожидают ли другие нити блокировку чтения. Это поведение "вторжения" может быть полезно в определенных ситуациях, хотя и нарушает справедливость. Если вы хотите соблюдать настройку справедливости для этой блокировки, используйте tryLock(0, TimeUnit.SECONDS), который практически эквивалентен (он также обнаруживает прерывание).
Если запись блокировки удерживается другой нитью, этот метод вернёт немедленно значение false.
tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
Приобретает блокировку чтения, если блокировка записи не удерживается другой нитью, и возвращает немедленно значение true. Если эта блокировка настроена на использование политики справедливого упорядочения, доступная блокировка не будет приобретена, если какие-либо другие нити ожидают блокировки. Это в отличие от метода tryLock(). Если вам нужна блокировка с таймаутом tryLock, которая позволяет "вторжение" на справедливой блокировке, объедините формы с таймаутом и без него:
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
} Если запись блокировки удерживается другой нитью, то текущая нить отключается для планирования нитей и находится в спящем режиме до тех пор, пока не произойдёт одно из трёх:
- Блокировка чтения приобретена текущей нитью; или
- Другая нить прерывает текущую нить; или
- Заданное время ожидания истекло.
Если блокировка чтения приобретена, то возвращается значение true.
Если текущая нить:
- имеет свой статус прерывания установленным при входе в этот метод; или
- была прервана во время приобретения блокировки чтения,
InterruptedException, а статус прерывания текущей нити сбрасывается. Если заданное время ожидания истекло, то возвращается значение false. Если время меньше или равно нулю, метод вообще не будет ждать.
В этой реализации, поскольку этот метод является явной точкой прерывания, предпочтение отдаётся реагированию на прерывание по сравнению с нормальным или повторным приобретением блокировки, а также по сравнению с сообщением об истечении времени ожидания.
- Указано:
-
tryLockв интерфейсеLock - Параметры:
-
timeout- время ожидания блокировки чтения -
unit- единица измерения времени параметра таймаута - Возвращает:
-
true, если блокировка чтения была приобретена - Исключения:
-
InterruptedException- если текущая нить прервана -
NullPointerException- если единица измерения времени равна null
unlock
public void unlock()
Если количество читателей теперь равно нулю, блокировка становится доступной для попыток блокировки записи. Если текущая нить не удерживает эту блокировку, выбрасывается IllegalMonitorStateException.
- Указано:
-
unlockв интерфейсеLock - Исключения:
-
IllegalMonitorStateException- если текущая нить не удерживает эту блокировку
newCondition
public Condition newCondition()
UnsupportedOperationException, потому что ReadLocks не поддерживают условия.- Указано:
-
newConditionв интерфейсеLock - Возвращает:
- Новый экземпляр
Conditionдля этого экземпляраLock - Исключения:
-
UnsupportedOperationException- всегда
toString
public String toString()
"Read locks =", за которой следует количество удерживаемых блокировок чтения.
© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html