Класс AbstractQueuedLongSynchronizer
- Все реализованные интерфейсы:
Serializable
public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
AbstractQueuedSynchronizer, в которой состояние синхронизации хранится как long. Этот класс имеет точно такую же структуру, свойства и методы, как AbstractQueuedSynchronizer, за исключением того, что все параметры и результаты, относящиеся к состоянию, определены как long, а не как int. Этот класс может быть полезен при создании синхронизаторов, таких как многоуровневые блокировки и барьеры, которым требуется 64 бита состояния. Примечания по использованию и примеры см. в разделе AbstractQueuedSynchronizer.
- Начиная с:
- 1.6
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
class |
AbstractQueuedLongSynchronizer.ConditionObject |
Реализация Condition для AbstractQueuedLongSynchronizer, служащая основой для реализации Lock. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
AbstractQueuedLongSynchronizer() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final void |
acquire |
Захватывает в эксклюзивном режиме, игнорируя прерывания. |
final void |
acquireInterruptibly |
Захватывает в эксклюзивном режиме, прекращая выполнение при прерывании. |
final void |
acquireShared |
Захватывает в разделяемом режиме, игнорируя прерывания. |
final void |
acquireSharedInterruptibly |
Захватывает в разделяемом режиме, прекращая выполнение при прерывании. |
protected final boolean |
compareAndSetState |
Атомарно устанавливает состояние синхронизации в указанное новое значение, если текущее значение состояния равно ожидаемому. |
final Collection |
getExclusiveQueuedThreads() |
Возвращает коллекцию потоков, которые могут ожидать захвата в эксклюзивном режиме. |
final Thread |
getFirstQueuedThread() |
Возвращает первый поток в очереди (ожидающий дольше всех) или null, если в очереди нет потоков. |
final Collection |
getQueuedThreads() |
Возвращает коллекцию потоков, которые могут ожидать захвата. |
final int |
getQueueLength() |
Возвращает оценочное число потоков, ожидающих захвата. |
final Collection |
getSharedQueuedThreads() |
Возвращает коллекцию потоков, которые могут ожидать захвата в разделяемом режиме. |
protected final long |
getState() |
Возвращает текущее значение состояния синхронизации. |
final Collection |
getWaitingThreads |
Возвращает коллекцию потоков, которые могут ожидать указанного условия, связанного с этим синхронизатором. |
final int |
getWaitQueueLength |
Возвращает оценочное число потоков, ожидающих указанного условия, связанного с этим синхронизатором. |
final boolean |
hasContended() |
Проверяет, пытались ли когда-либо потоки захватить этот синхронизатор, то есть блокировался ли когда-либо метод захвата. |
final boolean |
hasQueuedPredecessors() |
Проверяет, ожидали ли какие-либо потоки захвата дольше текущего потока. |
final boolean |
hasQueuedThreads() |
Проверяет, ожидают ли какие-либо потоки захвата. |
final boolean |
hasWaiters |
Проверяет, ожидают ли какие-либо потоки указанного условия, связанного с этим синхронизатором. |
protected boolean |
isHeldExclusively() |
Возвращает true, если синхронизация удерживается эксклюзивно относительно текущего (вызывающего) потока. |
final boolean |
isQueued |
Возвращает true, если указанный поток в данный момент находится в очереди. |
final boolean |
owns |
Проверяет, использует ли указанный ConditionObject этот синхронизатор в качестве блокировки. |
final boolean |
release |
Освобождает в эксклюзивном режиме. |
final boolean |
releaseShared |
Освобождает в разделяемом режиме. |
protected final void |
setState |
Устанавливает значение состояния синхронизации. |
String |
toString() |
Возвращает строку, идентифицирующую этот синхронизатор и его состояние. |
protected boolean |
tryAcquire |
Пытается захватить в эксклюзивном режиме. |
final boolean |
tryAcquireNanos |
Пытается захватить в эксклюзивном режиме, прекращая выполнение при прерывании и завершаясь неудачей по истечении указанного времени ожидания. |
protected long |
tryAcquireShared |
Пытается захватить в разделяемом режиме. |
final boolean |
tryAcquireSharedNanos |
Пытается захватить в разделяемом режиме, прекращая выполнение при прерывании и завершаясь неудачей по истечении указанного времени ожидания. |
protected boolean |
tryRelease |
Пытается установить состояние, отражающее освобождение в эксклюзивном режиме. |
protected boolean |
tryReleaseShared |
Пытается установить состояние, отражающее освобождение в разделяемом режиме. |
Методы, объявленные в классе AbstractOwnableSynchronizer
getExclusiveOwnerThread, setExclusiveOwnerThread | Модификатор и тип | Метод | Описание |
|---|---|---|
protected final Thread |
getExclusiveOwnerThread() |
Возвращает поток, последний раз заданный вызовом setExclusiveOwnerThread, или null, если он никогда не задавался. |
protected final void |
setExclusiveOwnerThread |
Задает поток, которому в данный момент принадлежит эксклюзивный доступ. |
Методы, объявленные в классе 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 |
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения определенного периода реального времени. |
Подробное описание конструкторов
AbstractQueuedLongSynchronizer
public AbstractQueuedLongSynchronizer()
Подробное описание методов
getState
protected final long getState()
volatile.- Возвращает:
- текущее значение состояния
setState
protected final void setState(long newState)
volatile.- Параметры:
-
newState— новое значение состояния
compareAndSetState
protected final boolean compareAndSetState(long expect, long update)
volatile.- Параметры:
-
expect— ожидаемое значение -
update— новое значение - Возвращает:
-
trueпри успехе. Возвращаемое значение false означает, что фактическое значение не совпало с ожидаемым.
tryAcquire
protected boolean tryAcquire(long arg)
Этот метод всегда вызывается потоком, выполняющим захват. Если метод сообщает о неудаче, метод захвата может поставить поток в очередь, если он ещё не находится в ней, и ожидать, пока другой поток не подаст сигнал освобождением. Это можно использовать для реализации метода Lock.tryLock().
Реализация по умолчанию выбрасывает исключение UnsupportedOperationException.
- Параметры:
-
arg— аргумент захвата. Это значение всегда передаётся методу захвата или является значением, сохранённым при входе в ожидание условия. В остальном оно не интерпретируется и может представлять что угодно. - Возвращает:
-
trueпри успехе. В случае успеха этот объект захвачен. - Исключения:
-
IllegalMonitorStateException— если захват приведёт к недопустимому состоянию этого синхронизатора. Для корректной работы синхронизации это исключение должно выбрасываться последовательно. -
UnsupportedOperationException— если монопольный режим не поддерживается
tryRelease
protected boolean tryRelease(long arg)
Этот метод всегда вызывается потоком, выполняющим освобождение.
Реализация по умолчанию выбрасывает исключение UnsupportedOperationException.
- Параметры:
-
arg— аргумент освобождения. Это значение всегда передаётся методу освобождения или является текущим значением состояния при входе в ожидание условия. В остальном оно не интерпретируется и может представлять что угодно. - Возвращает:
-
true, если теперь объект полностью освобождён и ожидающие потоки могут попытаться выполнить захват; в противном случае —false. - Исключения:
-
IllegalMonitorStateException— если освобождение приведёт к недопустимому состоянию этого синхронизатора. Для корректной работы синхронизации это исключение должно выбрасываться последовательно. -
UnsupportedOperationException— если монопольный режим не поддерживается
isHeldExclusively
protected boolean isHeldExclusively()
true, если синхронизация удерживается монопольно относительно текущего (вызывающего) потока. Этот метод вызывается при каждом вызове метода AbstractQueuedLongSynchronizer.ConditionObject. Реализация по умолчанию выбрасывает исключение UnsupportedOperationException. Этот метод вызывается внутри только методами AbstractQueuedLongSynchronizer.ConditionObject, поэтому его можно не определять, если условия не используются.
- Возвращает:
-
true, если синхронизация удерживается монопольно; в противном случае —false - Исключения:
-
UnsupportedOperationException— если условия не поддерживаются
acquire
public final void acquire(long arg)
tryAcquire(long) как минимум один раз; при успехе метод возвращает управление. В противном случае поток ставится в очередь и может многократно блокироваться и разблокироваться, вызывая tryAcquire(long) до достижения успеха. Этот метод можно использовать для реализации метода Lock.lock().- Параметры:
-
arg— аргумент захвата. Это значение передаётся вtryAcquire(long), но в остальном не интерпретируется и может представлять что угодно.
acquireInterruptibly
public final void acquireInterruptibly(long arg) throws InterruptedException
tryAcquire(long) как минимум один раз; при успехе метод возвращает управление. В противном случае поток ставится в очередь и может многократно блокироваться и разблокироваться, вызывая tryAcquire(long) до достижения успеха или прерывания потока. Этот метод можно использовать для реализации метода Lock.lockInterruptibly().- Параметры:
-
arg— аргумент захвата. Это значение передаётся вtryAcquire(long), но в остальном не интерпретируется и может представлять что угодно. - Исключения:
-
InterruptedException— если текущий поток прерван
tryAcquireNanos
public final boolean tryAcquireNanos(long arg, long nanosTimeout) throws InterruptedException
tryAcquire(long) как минимум один раз; при успехе метод возвращает управление. В противном случае поток ставится в очередь и может многократно блокироваться и разблокироваться, вызывая tryAcquire(long) до достижения успеха, прерывания потока или истечения времени ожидания. Этот метод можно использовать для реализации метода Lock.tryLock(long, TimeUnit).- Параметры:
-
arg— аргумент захвата. Это значение передаётся вtryAcquire(long), но в остальном не интерпретируется и может представлять что угодно. -
nanosTimeout— максимальное время ожидания в наносекундах - Возвращает:
-
true, если захват выполнен;false, если время ожидания истекло - Исключения:
-
InterruptedException— если текущий поток прерван
release
public final boolean release(long arg)
tryRelease(long) возвращает true, один или несколько потоков разблокируются. Этот метод можно использовать для реализации метода Lock.unlock().- Параметры:
-
arg— аргумент освобождения. Это значение передаётся вtryRelease(long), но в остальном не интерпретируется и может представлять что угодно. - Возвращает:
- значение, возвращённое методом
tryRelease(long)
hasQueuedThreads
public final boolean hasQueuedThreads()
true не гарантирует, что какой-либо другой поток когда-либо выполнит захват.- Возвращает:
-
true, если другие потоки могут ожидать выполнения захвата
hasContended
public final boolean hasContended()
В этой реализации операция выполняется за постоянное время.
- Возвращает:
-
true, если конкуренция когда-либо возникала
getFirstQueuedThread
public final Thread getFirstQueuedThread()
null, если в очереди сейчас нет потоков. В этой реализации операция обычно выполняется за постоянное время, но при конкуренции может перебирать элементы очереди, если другие потоки одновременно её изменяют.
- Возвращает:
- первый поток в очереди (дольше всех ожидающий) или
null, если в очереди сейчас нет потоков
isQueued
public final boolean isQueued(Thread thread)
Эта реализация обходит очередь, чтобы определить, присутствует ли в ней указанный поток.
- Параметры:
-
thread— поток - Возвращает:
-
true, если указанный поток находится в очереди - Исключения:
-
NullPointerException— если поток равен null
hasQueuedPredecessors
public final boolean hasQueuedPredecessors()
Вызов этого метода эквивалентен следующему выражению (но может быть эффективнее):
getFirstQueuedThread() != Thread.currentThread()
&& hasQueuedThreads() Обратите внимание: поскольку отмена из-за прерываний и истечения времени ожидания может произойти в любой момент, возвращаемое значение true не гарантирует, что другой поток выполнит захват раньше текущего. Также другой поток может выиграть гонку и попасть в очередь после возврата из этого метода со значением false, поскольку очередь была пуста.
Этот метод предназначен для использования справедливым синхронизатором, чтобы избежать опережения очереди. Метод tryAcquire(long) такого синхронизатора должен возвращать false, а его метод tryAcquireShared(long) должен возвращать отрицательное значение, если этот метод возвращает true (кроме случаев повторного входящего захвата). Например, метод
tryAcquire справедливого реентерабельного синхронизатора с монопольным режимом может выглядеть так:
protected boolean tryAcquire(long arg) {
if (isHeldExclusively()) {
// A reentrant acquire; increment hold count
return true;
} else if (hasQueuedPredecessors()) {
return false;
} else {
// try to acquire normally
}
}
- Возвращает:
-
true, если в очереди перед текущим потоком есть другой поток;false, если текущий поток находится в начале очереди или очередь пуста - Начиная с версии:
- 1.7
getQueueLength
public final int getQueueLength()
- Возвращает:
- оценку количества потоков, ожидающих выполнения захвата
getQueuedThreads
public final Collection<Thread> getQueuedThreads()
- Возвращает:
- коллекцию потоков
getExclusiveQueuedThreads
public final Collection<Thread> getExclusiveQueuedThreads()
getQueuedThreads(), за исключением того, что она содержит только потоки, ожидающие монопольного захвата.- Возвращает:
- коллекцию потоков
toString
public String toString()
"State =", за которой следует текущее значение getState(), а также "nonempty" или "empty" в зависимости от того, пуста ли очередь.owns
public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
- Параметры:
-
condition— условие - Возвращает:
-
true, если условие принадлежит этому синхронизатору - Исключения:
-
NullPointerException— если условие равно null
hasWaiters
public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
true не гарантирует, что будущий вызов signal разбудит какие-либо потоки. Этот метод предназначен главным образом для мониторинга состояния системы.- Параметры:
-
condition— условие - Возвращает:
-
true, если есть ожидающие потоки - Исключения:
-
IllegalMonitorStateException— если монопольная синхронизация не удерживается -
IllegalArgumentException— если указанное условие не связано с этим синхронизатором -
NullPointerException— если условие равно null
getWaitQueueLength
public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
- Параметры:
-
condition— условие - Возвращает:
- оценку количества ожидающих потоков
- Исключения:
-
IllegalMonitorStateException— если монопольная синхронизация не удерживается -
IllegalArgumentException— если указанное условие не связано с этим синхронизатором -
NullPointerException— если условие равно null
getWaitingThreads
public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
- Параметры:
-
condition— условие - Возвращает:
- коллекцию потоков
- Исключения:
-
IllegalMonitorStateException— если монопольная синхронизация не удерживается -
IllegalArgumentException— если указанное условие не связано с этим синхронизатором -
NullPointerException— если условие равно null
© 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.