Spec-Zone.ru › OpenJDK 25

Класс ReentrantReadWriteLock.ReadLock

java.lang.Object
java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
Все реализуемые интерфейсы:
Serializable, Lock
Внешний класс:
ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
Блокировка, возвращаемая методом ReentrantReadWriteLock.readLock().
С версии:
1.5
См. также:
  • Сериализованная форма

Краткое описание конструкторов

ReadLock(ReentrantReadWriteLock lock)
Модификатор Конструктор Описание
protected
Конструктор для использования подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
void lock()
Захватывает блокировку чтения.
void lockInterruptibly()
Захватывает блокировку чтения, если текущий поток не был прерван.
Condition newCondition()
Выбрасывает UnsupportedOperationException, поскольку ReadLocks не поддерживают условия.
String toString()
Возвращает строку, идентифицирующую эту блокировку и ее состояние.
boolean tryLock()
Захватывает блокировку чтения, только если на момент вызова блокировка записи не удерживается другим потоком.
boolean tryLock(long timeout, TimeUnit unit)
Захватывает блокировку чтения, если другой поток не удерживает блокировку записи в течение указанного времени ожидания и текущий поток не был прерван.
void unlock()
Пытается освободить эту блокировку.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

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
Возвращает:
строку, идентифицирующую эту блокировку и ее состояние

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API