Spec-Zone.ru › OpenJDK 8

Класс 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().

См. также:
Сериализованная форма

Конструкторы

Модификатор Конструктор и описание
protected ReadLock(ReentrantReadWriteLock lock)

Конструктор для использования подклассами

Методы

Модификатор и тип Метод и описание
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()

Попытка освободить эту блокировку.

Если количество читателей теперь равно нулю, блокировка становится доступной для попыток получения блокировки записи.

Определено в:
unlock в интерфейсе Lock

newCondition

public Condition newCondition()

Выбрасывает UnsupportedOperationException потому что ReadLocks не поддерживают условия.

Определено в:
newCondition в интерфейсе Lock
Возвращает:
Новый экземпляр Condition для этого экземпляра Lock
Исключения:
UnsupportedOperationException - всегда

toString

public String toString()

Возвращает строку, идентифицирующую эту блокировку, а также ее состояние блокировки. Состояние, в скобках, включает строку "Read locks =" и количество удерживаемых блокировок чтения.

Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую эту блокировку, а также ее состояние

© 1993, 2020, 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