Класс ReentrantReadWriteLock.WriteLock
- Все реализуемые интерфейсы:
Serializable, Lock
- Внешний класс:
ReentrantReadWriteLock
public static class ReentrantReadWriteLock.WriteLock extends Object implements Lock, Serializable
ReentrantReadWriteLock.writeLock().- Начиная с:
- 1.5
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
getHoldCount() |
Возвращает количество захватов этой блокировки записи текущим потоком. |
boolean |
isHeldByCurrentThread() |
Проверяет, удерживается ли эта блокировка записи текущим потоком. |
void |
lock() |
Захватывает блокировку записи. |
void |
lockInterruptibly() |
Захватывает блокировку записи, если текущий поток не был прерван. |
Condition |
newCondition() |
|
String |
toString() |
Возвращает строку, идентифицирующую эту блокировку и её состояние. |
boolean |
tryLock() |
Захватывает блокировку записи, только если в момент вызова она не удерживается другим потоком. |
boolean |
tryLock |
Захватывает блокировку записи, если в течение заданного времени ожидания она не удерживается другим потоком и текущий поток не был прерван. |
void |
unlock() |
Пытается освободить эту блокировку. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного интервала реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного интервала реального времени. |
Подробное описание конструкторов
WriteLock
protected WriteLock(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), который почти эквивалентен этому методу (он также обнаруживает прерывание).
Если текущий поток уже удерживает эту блокировку, счётчик захватов увеличивается на единицу, и метод возвращает true.
Если блокировка удерживается другим потоком, этот метод немедленно вернёт значение false.
tryLock
public boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException
Захватывает блокировку записи, если ни блокировка чтения, ни блокировка записи не удерживаются другим потоком, и немедленно возвращает значение true, устанавливая счётчик захватов блокировки записи в единицу. Если для этой блокировки задана политика справедливого упорядочивания, доступная блокировка не будет захвачена, если другие потоки ожидают блокировку записи. Это отличается от метода tryLock(). Если требуется, чтобы timed-вариант tryLock допускал захват без очереди для справедливой блокировки, можно объединить варианты с таймаутом и без него:
if (lock.tryLock() ||
lock.tryLock(timeout, unit)) {
...
} Если текущий поток уже удерживает эту блокировку, счётчик захватов увеличивается на единицу, и метод возвращает true.
Если блокировка удерживается другим потоком, текущий поток становится недоступным для планирования и приостанавливает выполнение до наступления одного из трёх событий:
- Текущий поток захватывает блокировку записи; или
- Другой поток прерывает текущий поток; или
- Истекает заданное время ожидания
Если блокировка записи захвачена, возвращается значение true, а счётчик захватов блокировки записи устанавливается в единицу.
Если текущий поток:
- входит в этот метод с установленным статусом прерывания; или
- прерывается во время захвата блокировки записи,
InterruptedException, а статус прерывания текущего потока сбрасывается. Если заданное время ожидания истекло, возвращается значение false. Если время меньше или равно нулю, метод не будет ждать.
В данной реализации, поскольку этот метод является явной точкой прерывания, обработка прерывания имеет приоритет над обычным или повторным захватом блокировки, а также над сообщением об истечении времени ожидания.
- Определено в:
-
tryLockв интерфейсеLock - Параметры:
-
timeout— время ожидания блокировки записи -
unit— единица измерения времени аргумента таймаута - Возвращает:
-
true, если блокировка была свободна и захвачена текущим потоком либо блокировка записи уже удерживалась текущим потоком; иfalse, если время ожидания истекло до того, как блокировку удалось захватить. - Исключения:
-
InterruptedException— если текущий поток прерван -
NullPointerException— если единица измерения времени равна null
unlock
public void unlock()
Если текущий поток удерживает эту блокировку, счётчик захватов уменьшается. Если теперь счётчик захватов равен нулю, блокировка освобождается. Если текущий поток не удерживает эту блокировку, выбрасывается IllegalMonitorStateException.
- Определено в:
-
unlockв интерфейсеLock - Исключения:
-
IllegalMonitorStateException— если текущий поток не удерживает эту блокировку
newCondition
public Condition newCondition()
Condition для использования с этим экземпляром Lock. Возвращённый экземпляр Condition поддерживает те же варианты использования, что и методы монитора Object (wait, notify и notifyAll) при использовании встроенной блокировки монитора.
- Если эта блокировка записи не удерживается при вызове любого метода
Condition, выбрасываетсяIllegalMonitorStateException. (Блокировки чтения удерживаются независимо от блокировок записи, поэтому они не проверяются и не затрагиваются. Однако вызов метода ожидания условия, когда текущий поток также захватил блокировки чтения, практически всегда является ошибкой, поскольку другие потоки, способные его разблокировать, не смогут захватить блокировку записи.) - При вызове методов ожидания условия блокировка записи освобождается, а перед возвратом метода захватывается снова; счётчик захватов блокировки восстанавливается до значения, которое он имел при вызове метода.
- Если поток прерван во время ожидания, ожидание завершается, выбрасывается
InterruptedException, а статус прерывания потока сбрасывается. - Ожидающие потоки получают сигналы в порядке FIFO.
- Порядок повторного захвата блокировки потоками, возвращающимися из методов ожидания, совпадает с порядком для потоков, изначально захватывающих блокировку. В общем случае этот порядок не определён, но для справедливых блокировок предпочтение отдаётся потокам, ожидающим дольше остальных.
- Определено в:
-
newConditionв интерфейсеLock - Возвращает:
- объект Condition
toString
public String toString()
"Unlocked" или строку "Locked by", за которой следует имя потока-владельца.isHeldByCurrentThread
public boolean isHeldByCurrentThread()
ReentrantReadWriteLock.isWriteLockedByCurrentThread().- Возвращает:
-
true, если текущий поток удерживает эту блокировку, иfalseв противном случае - Начиная с:
- 1.6
getHoldCount
public int getHoldCount()
ReentrantReadWriteLock.getWriteHoldCount().- Возвращает:
- количество захватов этой блокировки текущим потоком или ноль, если текущий поток не удерживает эту блокировку
- Начиная с:
- 1.6
© 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.