Класс ReentrantReadWriteLock.ReadLock
- java.lang.Object
-
- java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock
- Все реализуемые интерфейсы:
-
Serializable,Lock
- Вложенный класс:
- ReentrantReadWriteLock
public static class ReentrantReadWriteLock.ReadLock extends Object implements Lock, Serializable
Блокировка, возвращаемая методом ReadWriteLock.readLock().
- См. также:
- Сериализованная форма
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
ReadLock(ReentrantReadWriteLock lock) |
Конструктор для использования подклассами. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
lock() |
Приобретает чтение блокировки. |
void |
lockInterruptibly() |
Приобретает блокировку чтения, если текущий поток не был прерван. |
Condition |
newCondition() |
Выбрасывает |
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()
Приобретает блокировку чтения.
Приобретает блокировку чтения, если блокировка записи не удерживается другим потоком и возвращается немедленно.
Если блокировка записи удерживается другим потоком, то текущий поток отключается для планирования потоков и находится в ожидании, пока блокировка чтения не будет приобретена.
lockInterruptibly
public void lockInterruptibly()
throws InterruptedException
Приобретает блокировку чтения, если текущий поток не прерван.
Приобретает блокировку чтения, если блокировка записи не удерживается другим потоком и возвращается немедленно.
Если блокировка записи удерживается другим потоком, то текущий поток отключается для планирования потоков и находится в ожидании, пока не произойдёт одно из двух:
- Блокировка чтения приобретается текущим потоком;
- Другой поток прерывает текущий поток.
Если текущий поток:
- имеет свой статус прерывания установленным при входе в этот метод;
- был прерван во время приобретения блокировки чтения,
InterruptedException и статус прерывания текущего потока сбрасывается.
В этой реализации, так как этот метод является явной точкой прерывания, предпочтение отдается реагированию на прерывание перед обычным или рекурсивным приобретением блокировки.
- Определено в:
-
lockInterruptiblyв интерфейсеLock - Исключения:
-
InterruptedException- если текущий поток прерван
tryLock
public boolean tryLock()
Приобретает блокировку чтения только в том случае, если блокировка записи не удерживается другим потоком на момент вызова.
Приобретает блокировку чтения, если блокировка записи не удерживается другим потоком и немедленно возвращает значение true. Даже когда эта блокировка была настроена для использования справедливой политики упорядочивания, вызов tryLock() немедленно приобретёт блокировку чтения, если она доступна, независимо от того, ожидают ли другие потоки блокировку чтения. Это поведение "прорыва" может быть полезным в определенных ситуациях, даже если оно нарушает справедливость. Если вы хотите соблюдать настройку справедливости для этой блокировки, используйте tryLock(0, TimeUnit.SECONDS), которое почти эквивалентно (оно также обнаруживает прерывание).
Если блокировка записи удерживается другим потоком, этот метод немедленно вернет значение false.
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 =" и количество удерживаемых блокировок чтения.
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html