Класс 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 | Реализация условия для |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | 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() | Возвращает первый (наиболее ожидающий) поток в очереди или |
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() | Возвращает |
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в случае успеха. Возвращение 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- если текущий поток прерывается
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)
Возвращает коллекцию, содержащую потоки, которые могут ожидать на заданном условии, связанном с этим синхронизатором. Поскольку фактический набор потоков может динамически изменяться во время построения этого результата, возвращаемая коллекция является только приблизительной оценкой. Элементы возвращаемой коллекции не упорядочены каким-либо определённым образом.
- Параметры:
-
condition- условие - Возвращаемое значение:
- коллекция потоков
- Исключения:
-
IllegalMonitorStateException- если эксклюзивная синхронизация не удерживается -
IllegalArgumentException- если заданное условие не связано с этим синхронизатором -
NullPointerException- если условие равно 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html