Spec-Zone.ru › OpenJDK 8

Класс 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.

Конструкторы

Модификатор Конструктор и описание
protected AbstractQueuedLongSynchronizer()

Создает новый экземпляр AbstractQueuedLongSynchronizer с начальным состоянием синхронизации, равным нулю.

Методы

Модификатор и тип Метод и описание
void acquire(long arg)

Приобретает в эксклюзивном режиме, игнорируя прерывания.

void acquireInterruptibly(long arg)

Приобретает в эксклюзивном режиме, прерывая, если прервано.

void acquireShared(long arg)

Приобретает в общем режиме, игнорируя прерывания.

void acquireSharedInterruptibly(long arg)

Приобретает в общем режиме, прерывая, если прервано.

protected boolean compareAndSetState(long expect, long update)

Атомарно устанавливает состояние синхронизации в заданное обновленное значение, если текущее значение состояния равно ожидаемому значению.

Collection<Thread> getExclusiveQueuedThreads()

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

Thread getFirstQueuedThread()

Возвращает первый (самый ожидающий) поток в очереди или null если в настоящее время потоки не стоят в очереди.

Collection<Thread> getQueuedThreads()

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

int getQueueLength()

Возвращает оценку количества потоков, ожидающих приобретения.

Collection<Thread> getSharedQueuedThreads()

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

protected long getState()

Возвращает текущее значение состояния синхронизации.

Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)

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

int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)

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

boolean hasContended()

Запрашивает, оспаривали ли когда-либо потоки приобретение этого синхронизатора; то есть, блокировался ли когда-либо метод приобретения.

boolean hasQueuedPredecessors()

Запрашивает, ожидали ли какие-либо потоки приобретения дольше, чем текущий поток.

boolean hasQueuedThreads()

Запрашивает, ожидают ли какие-либо потоки приобретения.

boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)

Запрашивает, ожидают ли какие-либо потоки заданного условия, связанного с этим синхронизатором.

protected boolean isHeldExclusively()

Возвращает true, если синхронизация удерживается исключительно по отношению к текущему (вызывающему) потоку.

boolean isQueued(Thread thread)

Возвращает true, если данный поток в настоящее время находится в очереди.

boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)

Запрашивает, использует ли данный ConditionObject этот синхронизатор в качестве своей блокировки.

boolean release(long arg)

Освобождает в эксклюзивном режиме.

boolean releaseShared(long arg)

Освобождает в общем режиме.

protected void setState(long newState)

Устанавливает значение состояния синхронизации.

String toString()

Возвращает строку, идентифицирующую этот синхронизатор, а также его состояние.

protected boolean tryAcquire(long arg)

Пытается приобрести в эксклюзивном режиме.

boolean tryAcquireNanos(long arg, long nanosTimeout)

Пытается приобрести в эксклюзивном режиме, прерывая, если прервано, и завершая неудачей, если истекает заданный тайм-аут.

protected long tryAcquireShared(long arg)

Пытается приобрести в общем режиме.

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

protected AbstractQueuedLongSynchronizer()

Создает новый экземпляр 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 если успешно. Ложное значение указывает на то, что фактическое значение не было равно ожидаемому значению.

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, не ожидающего. (Ожидающие методы вместо этого вызывают release(long)).

Реализация по умолчанию вызывает исключение 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) до успеха.

Параметры:
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()

Запрашивает, оспаривали ли когда-либо потоки приобретение этого синхронизатора; то есть, если метод приобретения когда-либо блокировался.

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

Возвращает:
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(int 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 разбудит какие-либо потоки. Этот метод предназначен в первую очередь для использования в мониторинге состояния системы.

Параметры:
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)

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

Parameters:
condition - the condition
Returns:
коллекция потоков
Throws:
IllegalMonitorStateException - if exclusive synchronization is not held
IllegalArgumentException - if the given condition is not associated with this synchronizer
NullPointerException - if the condition is null

© 1993, 2020, 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.

Spec-Zone.ru

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