Класс 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() |
Пытается освободить эту блокировку. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, подлежит удалению: этот элемент API будет удален в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения для этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного времени. |
Подробное описание конструкторов
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.