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