Класс 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html