Spec-Zone.ru › OpenJDK 27

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

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

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, 2026, 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.

Spec-Zone.ru

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