Spec-Zone.ru › OpenJDK 17

Класс 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)
Запрашивает, использует ли данная условная переменная этот синхронизатор в качестве блокировки.
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 может поставить нить в очередь, если она ещё не в очереди, до тех пор, пока она не будет сигнализирована методом release другой нитью. Это можно использовать для реализации метода 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 может поставить нить в очередь, если она ещё не в очереди, до тех пор, пока она не будет сигнализирована методом release другой нитью.

Метод по умолчанию выбрасывает 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).
Параметры:
arg - аргумент приобретения. Это значение передаётся методу tryAcquire(long), но в противном случае не интерпретируется и может представлять собой что угодно.
nanosTimeout - максимальное время ожидания в наносекундах
Возвращает:
true , если приобретение выполнено; false , если таймаут истек
Исключения:
InterruptedException - если текущая нить прервана

release

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

toString

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

owns

public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
Определяет, использует ли данный ConditionObject этот синхронизатор в качестве своего замка.
Parameters:
condition - условие
Returns:
true если принадлежит
Throws:
NullPointerException - если условие равно null

hasWaiters

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

Длина очереди ожидания

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

Ожидающие потоки

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

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

Spec-Zone.ru

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