Класс ReentrantReadWriteLock.ReadLock
- Все реализованные интерфейсы:
-
Serializable,Lock
- Вложенный класс:
- ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.readLock().- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
lock() |
Получение блокировки для чтения. |
void |
lockInterruptibly() |
Получение блокировки для чтения, если текущий поток не прерван. |
Condition |
newCondition() |
Выбрасывает UnsupportedOperationException, потому что ReadLocks не поддерживают условия. |
String |
toString() |
Возвращает строку, идентифицирующую эту блокировку и ее состояние. |
boolean |
tryLock() |
Получение блокировки для чтения, только если блокировка для записи не удерживается другим потоком в момент вызова. |
boolean |
tryLock |
Получение блокировки для чтения, если блокировка для записи не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не прерван. |
void |
unlock() |
Попытка освободить эту блокировку. |
Подробное описание конструкторов
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, 2021, 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/17/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html