Класс 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 |
Попытка установить состояние, отражающее освобождение в совместном режиме. |
Методы, объявленные в классе java.util.concurrent.locks.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)
Этот метод всегда вызывается потоком, выполняющим приобретение. Если этот метод сообщает об ошибке, метод acquire может поместить поток в очередь, если он ещё не в очереди, до тех пор, пока он не будет сигнализирован освобождением другим потоком. Это можно использовать для реализации метода Lock.tryLock().
Реализация по умолчанию выбрасывает UnsupportedOperationException.
- Параметры:
-
arg- аргумент приобретения. Это значение всегда передаётся методу acquire или сохраняется при входе в ожидание условия. Значение в противном случае не интерпретируется и может представлять собой что угодно. - Возвращает:
-
trueв случае успеха. При успехе этот объект был приобретён. - Исключения:
-
IllegalMonitorStateException- если приобретение поставит этот синхронизатор в незаконное состояние. Это исключение должно выбрасываться последовательным образом для корректной работы синхронизации. -
UnsupportedOperationException- если эксклюзивный режим не поддерживается
tryRelease
protected boolean tryRelease(long arg)
Этот метод всегда вызывается потоком, выполняющим освобождение.
Реализация по умолчанию выбрасывает UnsupportedOperationException.
- Параметры:
-
arg- аргумент освобождения. Это значение всегда передаётся методу release или текущее значение состояния при входе в ожидание условия. Значение в противном случае не интерпретируется и может представлять собой что угодно. - Возвращает:
-
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).- Parameters:
-
arg- аргумент приобретения. Это значение передаётся вtryAcquire(long), но в противном случае не интерпретируется и может представлять собой что угодно. -
nanosTimeout- максимальное время ожидания в наносекундах - Returns:
-
trueесли получено;falseесли таймаут истек - Throws:
-
InterruptedException- если текущий поток прерван
release
public final boolean release(long arg)
tryRelease(long) возвращает true. Этот метод может быть использован для реализации метода Lock.unlock().- Parameters:
-
arg- аргумент освобождения. Это значение передаётся вtryRelease(long), но в противном случае не интерпретируется и может представлять собой что угодно. - Returns:
- значение, возвращённое из
tryRelease(long)
hasQueuedThreads
public final boolean hasQueuedThreads()
true не гарантирует, что какой-либо другой поток когда-либо получит доступ.- Returns:
-
trueесли могут быть другие потоки, ожидающие приобретения
hasContended
public final boolean hasContended()
В этой реализации данная операция выполняется за константное время.
- Returns:
-
trueесли когда-либо было столкновение
getFirstQueuedThread
public final Thread getFirstQueuedThread()
null если в очереди нет потоков. В этой реализации эта операция обычно выполняется за константное время, но может выполняться итерации при столкновении, если другие потоки одновременно изменяют очередь.
- Returns:
- первый (самый долго ожидающий) поток в очереди или
nullесли в очереди нет потоков
isQueued
public final boolean isQueued(Thread thread)
В этой реализации происходит обход очереди для определения наличия данного потока.
- Parameters:
-
thread- поток - Returns:
-
trueесли указанный поток находится в очереди - Throws:
-
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
}
}
- Returns:
-
trueесли в очереди есть поток, предшествующий текущему потоку, иfalseесли текущий поток находится в начале очереди или очередь пуста - Since:
- 1.7
getQueueLength
public final int getQueueLength()
- Returns:
- приблизительное количество потоков, ожидающих приобретения
getQueuedThreads
public final Collection<Thread> getQueuedThreads()
- Returns:
- коллекция потоков
getExclusiveQueuedThreads
public final Collection<Thread> getExclusiveQueuedThreads()
getQueuedThreads(), за исключением того, что возвращаются только те потоки, которые ожидают из-за эксклюзивного приобретения.- Returns:
- коллекция потоков
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html