Класс AbstractQueuedLongSynchronizer
- Все реализованные интерфейсы:
Serializable
public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
AbstractQueuedSynchronizer, в которой состояние синхронизации хранится как long. Этот класс имеет точно такую же структуру, свойства и методы, как AbstractQueuedSynchronizer, за исключением того, что все параметры и результаты, связанные с состоянием, имеют тип long, а не int. Этот класс может быть полезен при создании синхронизаторов, таких как многоуровневые блокировки и барьеры, которым требуется 64-битное состояние. Примечания по использованию и примеры см. в разделе AbstractQueuedSynchronizer.
- Начиная с:
- 1.6
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
class |
AbstractQueuedLongSynchronizer.ConditionObject |
Реализация условия для 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
Подробное описание конструкторов
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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html