Spec-Zone.ru › OpenJDK 24

Класс 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()
Пытается освободить эту блокировку.

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html

Spec-Zone.ru

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