Spec-Zone.ru › OpenJDK 24

Класс AbstractQueuedLongSynchronizer

java.lang.Object
java.util.concurrent.locks.AbstractOwnableSynchronizer
java.util.concurrent.locks.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(long arg)
Приобретение в эксклюзивном режиме, игнорируя прерывания.
final void acquireInterruptibly(long arg)
Приобретение в эксклюзивном режиме, прерывание, если прервано.
final void acquireShared(long arg)
Приобретение в совместном режиме, игнорируя прерывания.
final void acquireSharedInterruptibly(long arg)
Приобретение в совместном режиме, прерывание, если прервано.
protected final boolean compareAndSetState(long expect, long update)
Атомарно устанавливает состояние синхронизации на заданное обновлённое значение, если текущее значение состояния равно ожидаемому значению.
final Collection<Thread> getExclusiveQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать приобретения в эксклюзивном режиме.
final Thread getFirstQueuedThread()
Возвращает первый (наиболее долго ожидающий) поток в очереди или null, если потоки в очереди отсутствуют.
final Collection<Thread> getQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать приобретения.
final int getQueueLength()
Возвращает оценку количества потоков, ожидающих приобретения.
final Collection<Thread> getSharedQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать приобретения в совместном режиме.
protected final long getState()
Возвращает текущее значение состояния синхронизации.
final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает коллекцию, содержащую те потоки, которые могут ожидать на заданном условии, связанном с этим синхронизатором.
final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает оценку количества потоков, ожидающих на заданном условии, связанном с этим синхронизатором.
final boolean hasContended()
Определяет, конкурировали ли какие-либо потоки за приобретение этого синхронизатора; то есть, блокировался ли метод приобретения.
final boolean hasQueuedPredecessors()
Определяет, ожидали ли какие-либо потоки приобретения дольше, чем текущий поток.
final boolean hasQueuedThreads()
Определяет, ожидают ли какие-либо потоки приобретения.
final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
Определяет, ожидают ли какие-либо потоки на заданном условии, связанном с этим синхронизатором.
protected boolean isHeldExclusively()
Возвращает true, если синхронизация удерживается в эксклюзивном режиме относительно текущего (вызывающего) потока.
final boolean isQueued(Thread thread)
Возвращает true, если указанный поток в настоящее время находится в очереди.
final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
Определяет, использует ли заданный объект ConditionObject этот синхронизатор в качестве своей блокировки.
final boolean release(long arg)
Освобождение в эксклюзивном режиме.
final boolean releaseShared(long arg)
Освобождение в совместном режиме.
protected final void setState(long newState)
Устанавливает значение состояния синхронизации.
String toString()
Возвращает строку, идентифицирующую этот синхронизатор, а также его состояние.
protected boolean tryAcquire(long arg)
Попытка приобретения в эксклюзивном режиме.
final boolean tryAcquireNanos(long arg, long nanosTimeout)
Попытка приобретения в эксклюзивном режиме, прерывание, если прервано, и неудача, если заданный таймаут истекает.
protected long tryAcquireShared(long arg)
Попытка приобретения в совместном режиме.
final boolean tryAcquireSharedNanos(long arg, long nanosTimeout)
Попытка приобретения в совместном режиме, прерывание, если прервано, и неудача, если заданный таймаут истекает.
protected boolean tryRelease(long arg)
Попытка установить состояние, отражающее освобождение в эксклюзивном режиме.
protected boolean tryReleaseShared(long arg)
Попытка установить состояние, отражающее освобождение в совместном режиме.

Методы, объявленные в классе java.util.concurrent.locks.AbstractOwnableSynchronizer

getExclusiveOwnerThread, setExclusiveOwnerThread

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, 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)
Попытка приобретения в эксклюзивном режиме. Этот метод должен запросить, разрешает ли состояние объекта его приобретение в эксклюзивном режиме, и если да, то приобрести его.

Этот метод всегда вызывается потоком, выполняющим приобретение. Если этот метод сообщает об ошибке, метод acquire может поместить поток в очередь, если он ещё не в очереди, до тех пор, пока он не будет сигнализирован освобождением другим потоком. Это можно использовать для реализации метода Lock.tryLock().

Реализация по умолчанию выбрасывает UnsupportedOperationException.

Параметры:
arg - аргумент приобретения. Это значение всегда передаётся методу acquire или сохраняется при входе в ожидание условия. Значение в противном случае не интерпретируется и может представлять собой что угодно.
Возвращает:
true в случае успеха. При успехе этот объект был приобретён.
Исключения:
IllegalMonitorStateException - если приобретение поставит этот синхронизатор в незаконное состояние. Это исключение должно выбрасываться последовательным образом для корректной работы синхронизации.
UnsupportedOperationException - если эксклюзивный режим не поддерживается

tryRelease

protected boolean tryRelease(long arg)
Попытка установить состояние, отражающее освобождение в эксклюзивном режиме.

Этот метод всегда вызывается потоком, выполняющим освобождение.

Реализация по умолчанию выбрасывает UnsupportedOperationException.

Параметры:
arg - аргумент освобождения. Это значение всегда передаётся методу release или текущее значение состояния при входе в ожидание условия. Значение в противном случае не интерпретируется и может представлять собой что угодно.
Возвращает:
true, если этот объект теперь находится в полностью освобождённом состоянии, так что любые ожидающие потоки могут попытаться приобрести; и false в противном случае.
Исключения:
IllegalMonitorStateException - если освобождение поставит этот синхронизатор в незаконное состояние. Это исключение должно выбрасываться последовательным образом для корректной работы синхронизации.
UnsupportedOperationException - если эксклюзивный режим не поддерживается

tryAcquireShared

protected long tryAcquireShared(long arg)
Попытка приобретения в совместном режиме. Этот метод должен запросить, разрешает ли состояние объекта его приобретение в совместном режиме, и если да, то приобрести его.

Этот метод всегда вызывается потоком, выполняющим приобретение. Если этот метод сообщает об ошибке, метод acquire может поместить поток в очередь, если он ещё не в очереди, до тех пор, пока он не будет сигнализирован освобождением другим потоком.

Реализация по умолчанию выбрасывает UnsupportedOperationException.

Параметры:
arg - аргумент приобретения. Это значение всегда передаётся методу acquire или сохраняется при входе в ожидание условия. Значение в противном случае не интерпретируется и может представлять собой что угодно.
Возвращает:
отрицательное значение при ошибке; ноль, если приобретение в совместном режиме удалось, но последующее приобретение в совместном режиме не может произойти; и положительное значение, если приобретение в совместном режиме удалось и последующие приобретения в совместном режиме могут также произойти, в этом случае последующий ожидающий поток должен проверить доступность. (Поддержка трёх различных возвращаемых значений позволяет этому методу использоваться в контекстах, где приобретения только иногда действуют исключительно.) При успехе этот объект был приобретён.
Исключения:
IllegalMonitorStateException - если приобретение поставит этот синхронизатор в незаконное состояние. Это исключение должно выбрасываться последовательным образом для корректной работы синхронизации.
UnsupportedOperationException - если совместный режим не поддерживается

tryReleaseShared

protected boolean tryReleaseShared(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)

acquireShared

public final void acquireShared(long arg)
Приобретает доступ в режиме совместного использования, игнорируя прерывания. Реализуется путём вызова, как минимум один раз, tryAcquireShared(long), возвращая результат при успехе. В противном случае, поток помещается в очередь, возможно, неоднократно блокируется и разблокируется, вызывая tryAcquireShared(long) до достижения успеха.
Parameters:
arg - аргумент приобретения. Это значение передаётся в tryAcquireShared(long), но в противном случае не интерпретируется и может представлять собой что угодно.

acquireSharedInterruptibly

public final void acquireSharedInterruptibly(long arg) throws InterruptedException
Приобретает доступ в режиме совместного использования, прерывая выполнение при прерывании. Реализуется путём проверки состояния прерывания, а затем вызова, как минимум один раз, tryAcquireShared(long), возвращая результат при успехе. В противном случае, поток помещается в очередь, возможно, неоднократно блокируется и разблокируется, вызывая tryAcquireShared(long) до достижения успеха или прерывания потока.
Parameters:
arg - аргумент приобретения. Это значение передаётся в tryAcquireShared(long), но в противном случае не интерпретируется и может представлять собой что угодно.
Throws:
InterruptedException - если текущий поток прерван

tryAcquireSharedNanos

public final boolean tryAcquireSharedNanos(long arg, long nanosTimeout) throws InterruptedException
Попытка получить доступ в режиме совместного использования, прерывая выполнение при прерывании и возвращая ошибку при истечении заданного таймаута. Реализуется путём проверки состояния прерывания, а затем вызова, как минимум один раз, tryAcquireShared(long), возвращая результат при успехе. В противном случае, поток помещается в очередь, возможно, неоднократно блокируется и разблокируется, вызывая tryAcquireShared(long) до достижения успеха, прерывания потока или истечения таймаута.
Parameters:
arg - аргумент приобретения. Это значение передаётся в tryAcquireShared(long), но в противном случае не интерпретируется и может представлять собой что угодно.
nanosTimeout - максимальное время ожидания в наносекундах
Returns:
true если получено; false если таймаут истек
Throws:
InterruptedException - если текущий поток прерван

releaseShared

public final boolean releaseShared(long arg)
Освобождает доступ в режиме совместного использования. Реализуется разблокировкой одного или нескольких потоков, если tryReleaseShared(long) возвращает true.
Parameters:
arg - аргумент освобождения. Это значение передаётся в tryReleaseShared(long), но в противном случае не интерпретируется и может представлять собой что угодно.
Returns:
значение, возвращённое из tryReleaseShared(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)
Возвращает true, если указанный поток находится в очереди.

В этой реализации происходит обход очереди для определения наличия данного потока.

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:
коллекция потоков

getSharedQueuedThreads

public final Collection<Thread> getSharedQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать получения доступа в общем режиме. У этой коллекции те же свойства, что и у getQueuedThreads(), за исключением того, что она возвращает только те потоки, которые ожидают из-за общего приобретения.
Возвращает:
коллекцию потоков

toString

public String toString()
Возвращает строку, идентифицирующую этот синхронизатор, а также его состояние. Состояние, в скобках, включает строку "State =", за которой следует текущее значение getState(), и либо "nonempty", либо "empty" в зависимости от того, пуста ли очередь.
Переопределяет:
toString в классе Object
Возвращает:
строку, идентифицирующую этот синхронизатор, а также его состояние

owns

public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
Определяет, использует ли заданный ConditionObject этот синхронизатор в качестве своего блокировки.
Параметры:
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API