Spec-Zone.ru › OpenJDK 21

Класс 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)
Попытка получения в эксклюзивном режиме. Этот метод должен запросить, позволяет ли состояние объекта получить его в эксклюзивном режиме, и, если да, получить его.

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

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

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

tryRelease

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

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

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

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

tryAcquireShared

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

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

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

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

tryReleaseShared

protected boolean tryReleaseShared(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 - если текущий поток прерван

освободить

public final boolean release(long arg)
Освобождение в эксклюзивном режиме. Реализовано разблокировкой одной или нескольких нитей, если tryRelease(long) возвращает true. Этот метод может быть использован для реализации метода Lock.unlock().
Параметры:
arg - аргумент освобождения. Это значение передаётся в tryRelease(long), но в противном случае не интерпретируется и может представлять что угодно.
Возвращает:
значение, возвращённое из tryRelease(long)

acquireShared

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

acquireSharedInterruptibly

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

tryAcquireSharedNanos

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

releaseShared

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

hasQueuedThreads

public final boolean hasQueuedThreads()
Определяет, ожидают ли какие-либо нити приобретения. Обратите внимание, что из-за отмен, вызванных прерываниями и таймаутами, которые могут произойти в любое время, возвращение true не гарантирует, что какая-либо другая нить когда-либо приобретёт.
Возвращает:
true если могут быть другие нити, ожидающие приобретения

hasContended

public final boolean hasContended()
Определяет, конкурировали ли когда-либо нити за приобретение этого синхронизатора; то есть, если метод acquire когда-либо блокировал.

В этой реализации эта операция возвращает результат за постоянное время.

Возвращает:
true если когда-либо была конкуренция

getFirstQueuedThread

public final Thread getFirstQueuedThread()
Возвращает первую (самую долго ожидающую) нить в очереди или null , если нити в очереди нет.

В этой реализации эта операция обычно возвращает результат за постоянное время, но может итерироваться при конкуренции, если другие нити одновременно изменяют очередь.

Возвращает:
первую (самую долго ожидающую) нить в очереди или null если нити в очереди нет

isQueued

public final boolean isQueued(Thread thread)
Возвращает true, если данная нить в настоящее время находится в очереди.

Эта реализация перебирает очередь для определения наличия данной нити.

Параметры:
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(), за исключением того, что она возвращает только те нити, которые ожидают из-за эксклюзивного приобретения.
Возвращает:
коллекцию нитей

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 разбудит какие-либо потоки. Данный метод предназначен в первую очередь для мониторинга состояния системы.
Parameters:
condition - условие
Returns:
true если есть ожидающие потоки
Throws:
IllegalMonitorStateException - если эксклюзивная синхронизация не удерживается
IllegalArgumentException - если заданное условие не связано с этим синхронизатором
NullPointerException - если условие равно null

getWaitQueueLength

public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает оценку количества потоков, ожидающих на заданном условии, связанном с этим синхронизатором. Обратите внимание, что из-за таймаутов и прерываний, которые могут произойти в любое время, оценка служит только верхней границей для фактического количества ожидающих потоков. Этот метод предназначен для мониторинга состояния системы, а не для управления синхронизацией.
Parameters:
condition - условие
Returns:
оцененное количество ожидающих потоков
Throws:
IllegalMonitorStateException - если эксклюзивная синхронизация не удерживается
IllegalArgumentException - если заданное условие не связано с этим синхронизатором
NullPointerException - если условие равно null

getWaitingThreads

public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает коллекцию, содержащую потоки, которые могут ожидать на заданном условии, связанном с этим синхронизатором. Поскольку фактический набор потоков может динамически изменяться во время построения этого результата, возвращаемая коллекция является лишь приблизительной оценкой. Элементы возвращаемой коллекции не упорядочены каким-либо определенным образом.
Parameters:
condition - условие
Returns:
коллекция потоков
Throws:
IllegalMonitorStateException - если эксклюзивная синхронизация не удерживается
IllegalArgumentException - если заданное условие не связано с этим синхронизатором
NullPointerException - если условие равно null

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html

Spec-Zone.ru

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