Класс ReentrantReadWriteLock.ReadLock
- Все реализованные интерфейсы:
-
Serializable,Lock
- Вложенный класс:
ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.readLock().- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
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()
Получает блокировку чтения, если блокировка записи не удерживается другим потоком и возвращает результат немедленно.
Если блокировка записи удерживается другим потоком, то текущий поток отключается для целей планирования потоков и находится в ожидании, пока блокировка чтения не будет получена.
- Определено в:
-
lockв интерфейсеLock
lockInterruptibly
public void lockInterruptibly() throws InterruptedException
Получает блокировку чтения, если блокировка записи не удерживается другим потоком и возвращает результат немедленно.
Если блокировка записи удерживается другим потоком, то текущий поток отключается для целей планирования потоков и находится в ожидании, пока не произойдёт одно из двух:
- Блокировка чтения получена текущим потоком; или
- Другой поток прерывает текущий поток.
Если текущий поток:
- имеет установлен статус прерывания при входе в этот метод; или
- прерывается во время получения блокировки чтения,
InterruptedException, и статус прерывания текущего потока сбрасывается. В этой реализации, так как этот метод является явной точкой прерывания, приоритет отдается обработке прерывания вместо обычного или рекурсивного получения блокировки.
- Определено в:
-
lockInterruptiblyв интерфейсеLock - Исключения:
-
InterruptedException- если текущий поток прерван
tryLock
public boolean tryLock()
Получает блокировку чтения, если блокировка записи не удерживается другим потоком, и возвращает результат немедленно со значением true. Даже когда эта блокировка настроена на использование политики справедливого порядка, вызов tryLock() немедленно получит блокировку чтения, если она доступна, независимо от того, ожидают ли другие потоки блокировку чтения. Это поведение "вторжения" может быть полезно в определенных ситуациях, хотя оно нарушает справедливость. Если вы хотите соблюдать настройку справедливости для этой блокировки, используйте tryLock(0, TimeUnit.SECONDS), который почти эквивалентен (он также обнаруживает прерывание).
Если блокировка записи удерживается другим потоком, то этот метод возвращает результат немедленно со значением false.
- Определено в:
-
tryLockв интерфейсеLock - Возвращает:
-
trueесли блокировка чтения была получена
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 =" и количество удерживаемых блокировок чтения.- Переопределяет:
-
toStringв классеObject - Возвращает:
- строку, идентифицирующую эту блокировку, а также ее состояние
© 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.ReadLock.html