Spec-Zone.ru › OpenJDK 25

Класс AbstractQueuedLongSynchronizer

java.lang.Object
java.util.concurrent.locks.AbstractOwnableSynchronizer
java.util.concurrent.locks.AbstractQueuedLongSynchronizer
Все реализованные интерфейсы:
Serializable
public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
Версия AbstractQueuedSynchronizer, в которой состояние синхронизации хранится как long. Этот класс имеет точно такую же структуру, свойства и методы, как AbstractQueuedSynchronizer, за исключением того, что все параметры и результаты, связанные с состоянием, имеют тип long, а не int. Этот класс может быть полезен при создании синхронизаторов, таких как многоуровневые блокировки и барьеры, которым требуется 64-битное состояние.

Примечания по использованию и примеры см. в разделе AbstractQueuedSynchronizer.

Начиная с:
1.6
См. также:
  • Сериализованная форма

Краткое описание вложенных классов

Модификатор и тип Класс Описание
class  AbstractQueuedLongSynchronizer.ConditionObject
Реализация условия для AbstractQueuedLongSynchronizer, служащая основой для реализации Lock.

Краткое описание конструкторов

Конструктор Описание
AbstractQueuedLongSynchronizer()
Конструктор, вызываемый подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
final void acquire(long arg)
Захватывает блокировку в эксклюзивном режиме, игнорируя прерывания.
final void acquireInterruptibly(long arg)
Захватывает блокировку в эксклюзивном режиме, прекращая выполнение при прерывании.
final void acquireShared(long arg)
Захватывает блокировку в совместном режиме, игнорируя прерывания.
final void acquireSharedInterruptibly(long arg)
Захватывает блокировку в совместном режиме, прекращая выполнение при прерывании.
protected final boolean compareAndSetState(long expect, long update)
Атомарно устанавливает состояние синхронизации в заданное новое значение, если текущее значение состояния равно ожидаемому.
final Collection<Thread> getExclusiveQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата блокировки в эксклюзивном режиме.
final Thread getFirstQueuedThread()
Возвращает первый поток в очереди (ожидающий дольше всех) или null, если в очереди нет потоков.
final Collection<Thread> getQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата блокировки.
final int getQueueLength()
Возвращает оценочное количество потоков, ожидающих захвата блокировки.
final Collection<Thread> getSharedQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата блокировки в совместном режиме.
protected final long getState()
Возвращает текущее значение состояния синхронизации.
final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает коллекцию, содержащую потоки, которые могут ожидать выполнения заданного условия, связанного с этим синхронизатором.
final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
Возвращает оценочное количество потоков, ожидающих выполнения заданного условия, связанного с этим синхронизатором.
final boolean hasContended()
Проверяет, пытались ли когда-либо потоки захватить этот синхронизатор, то есть блокировался ли когда-либо метод захвата.
final boolean hasQueuedPredecessors()
Проверяет, ожидали ли какие-либо потоки захвата блокировки дольше текущего потока.
final boolean hasQueuedThreads()
Проверяет, ожидают ли какие-либо потоки захвата блокировки.
final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
Проверяет, ожидают ли какие-либо потоки выполнения заданного условия, связанного с этим синхронизатором.
protected boolean isHeldExclusively()
Возвращает true, если блокировка синхронизации удерживается эксклюзивно относительно текущего (вызывающего) потока.
final boolean isQueued(Thread thread)
Возвращает true, если указанный поток в данный момент находится в очереди.
final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
Проверяет, использует ли указанный ConditionObject этот синхронизатор в качестве блокировки.
final boolean release(long arg)
Освобождает блокировку в эксклюзивном режиме.
final boolean releaseShared(long arg)
Освобождает блокировку в совместном режиме.
protected final void setState(long newState)
Устанавливает значение состояния синхронизации.
String toString()
Возвращает строку, идентифицирующую этот синхронизатор, а также его состояние.
protected boolean tryAcquire(long arg)
Пытается захватить блокировку в эксклюзивном режиме.
final boolean tryAcquireNanos(long arg, long nanosTimeout)
Пытается захватить блокировку в эксклюзивном режиме, прекращая выполнение при прерывании и завершая неудачей по истечении заданного времени ожидания.
protected long tryAcquireShared(long arg)
Пытается захватить блокировку в совместном режиме.
final boolean tryAcquireSharedNanos(long arg, long nanosTimeout)
Пытается захватить блокировку в совместном режиме, прекращая выполнение при прерывании и завершая неудачей по истечении заданного времени ожидания.
protected boolean tryRelease(long arg)
Пытается установить состояние, отражающее освобождение блокировки в эксклюзивном режиме.
protected boolean tryReleaseShared(long arg)
Пытается установить состояние, отражающее освобождение блокировки в совместном режиме.

Методы, объявленные в классе AbstractOwnableSynchronizer

getExclusiveOwnerThread, setExclusiveOwnerThread

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

AbstractQueuedLongSynchronizer

public AbstractQueuedLongSynchronizer()
Конструктор, предназначенный для вызова подклассами.

Подробное описание методов

getState

protected final long getState()
Возвращает текущее значение состояния синхронизации. Эта операция обладает семантикой памяти чтения volatile.
Возвращает:
текущее значение состояния

setState

protected final void setState(long newState)
Устанавливает значение состояния синхронизации. Эта операция обладает семантикой памяти записи volatile.
Параметры:
newState — новое значение состояния

compareAndSetState

protected final boolean compareAndSetState(long expect, long update)
Атомарно устанавливает состояние синхронизации в указанное новое значение, если текущее значение состояния совпадает с ожидаемым. Эта операция обладает семантикой памяти чтения и записи volatile.
Параметры:
expect — ожидаемое значение
update — новое значение
Возвращает:
true при успешном выполнении. Возвращаемое значение false означает, что фактическое значение не совпало с ожидаемым.

tryAcquire

protected boolean tryAcquire(long arg)
Пытается выполнить захват в эксклюзивном режиме. Этот метод должен проверить, позволяет ли состояние объекта выполнить захват в эксклюзивном режиме, и, если позволяет, выполнить его.

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

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

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

tryRelease

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

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

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

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

tryAcquireShared

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

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

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

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

tryReleaseShared

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

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

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

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

isHeldExclusively

protected boolean isHeldExclusively()
Возвращает true, если текущий (вызывающий) поток удерживает блокировку синхронизации эксклюзивно. Этот метод вызывается при каждом вызове метода AbstractQueuedLongSynchronizer.ConditionObject.

Реализация по умолчанию выбрасывает UnsupportedOperationException. Этот метод вызывается внутри только из методов AbstractQueuedLongSynchronizer.ConditionObject, поэтому его не нужно определять, если условия не используются.

Возвращает:
true, если синхронизация удерживается эксклюзивно; в противном случае — false
Выбрасывает:
UnsupportedOperationException — если условия не поддерживаются

acquire

public final void acquire(long arg)
Выполняет захват в эксклюзивном режиме, игнорируя прерывания. Реализован путём вызова как минимум один раз метода tryAcquire(long) и возврата при успехе. В противном случае поток ставится в очередь и может неоднократно блокироваться и разблокироваться, вызывая tryAcquire(long) до успешного выполнения. Этот метод можно использовать для реализации метода Lock.lock().
Параметры:
arg — аргумент захвата. Это значение передаётся методу tryAcquire(long), но в остальном не интерпретируется и может представлять любые данные.

acquireInterruptibly

public final void acquireInterruptibly(long arg) throws InterruptedException
Выполняет захват в эксклюзивном режиме, прерывая выполнение при прерывании потока. Сначала проверяется статус прерывания, затем как минимум один раз вызывается метод tryAcquire(long) с возвратом при успехе. В противном случае поток ставится в очередь и может неоднократно блокироваться и разблокироваться, вызывая tryAcquire(long) до успешного выполнения или прерывания потока. Этот метод можно использовать для реализации метода Lock.lockInterruptibly().
Параметры:
arg — аргумент захвата. Это значение передаётся методу tryAcquire(long), но в остальном не интерпретируется и может представлять любые данные.
Выбрасывает:
InterruptedException — если текущий поток прерван

tryAcquireNanos

public final boolean tryAcquireNanos(long arg, long nanosTimeout) throws InterruptedException
Пытается выполнить захват в эксклюзивном режиме, прерывая выполнение при прерывании потока и завершаясь неудачей по истечении заданного времени ожидания. Сначала проверяется статус прерывания, затем как минимум один раз вызывается метод tryAcquire(long) с возвратом при успехе. В противном случае поток ставится в очередь и может неоднократно блокироваться и разблокироваться, вызывая tryAcquire(long) до успешного выполнения, прерывания потока или истечения времени ожидания. Этот метод можно использовать для реализации метода Lock.tryLock(long, TimeUnit).
Параметры:
arg — аргумент захвата. Это значение передаётся методу tryAcquire(long), но в остальном не интерпретируется и может представлять любые данные.
nanosTimeout — максимальное время ожидания в наносекундах
Возвращает:
true, если захват выполнен; false, если истекло время ожидания
Выбрасывает:
InterruptedException — если текущий поток прерван

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(long arg) {
  if (isHeldExclusively()) {
    // A reentrant acquire; increment hold count
    return true;
  } else if (hasQueuedPredecessors()) {
    return false;
  } else {
    // try to acquire normally
  }
}
Возвращает:
true, если в очереди перед текущим потоком есть ожидающий поток, и false, если текущий поток находится в начале очереди или очередь пуста
С:
1.7

getQueueLength

public final int getQueueLength()
Возвращает оценочное число потоков, ожидающих захвата. Это значение является лишь оценкой, поскольку число потоков может динамически меняться во время обхода внутренних структур данных этим методом. Метод предназначен для мониторинга состояния системы, а не для управления синхронизацией.
Возвращает:
оценочное число потоков, ожидающих захвата

getQueuedThreads

public final Collection<Thread> getQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата. Поскольку фактический набор потоков может динамически меняться во время формирования результата, возвращаемая коллекция является лишь приблизительной оценкой. Порядок элементов возвращаемой коллекции не определён. Этот метод предназначен для создания подклассов, предоставляющих более широкие возможности мониторинга.
Возвращает:
коллекцию потоков

getExclusiveQueuedThreads

public final Collection<Thread> getExclusiveQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата в эксклюзивном режиме. Метод обладает теми же свойствами, что и getQueuedThreads(), за исключением того, что возвращает только потоки, ожидающие эксклюзивного захвата.
Возвращает:
коллекцию потоков

getSharedQueuedThreads

public final Collection<Thread> getSharedQueuedThreads()
Возвращает коллекцию, содержащую потоки, которые могут ожидать захвата в разделяемом режиме. Метод обладает теми же свойствами, что и getQueuedThreads(), за исключением того, что возвращает только потоки, ожидающие разделяемого захвата.
Возвращает:
коллекцию потоков

toString

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

owns

public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
Проверяет, использует ли указанный объект ConditionObject этот синхронизатор в качестве блокировки.
Параметры:
condition — условие
Возвращает:
true, если условие принадлежит этому синхронизатору
Выбрасывает:
NullPointerException — если условие равно null

hasWaiters

public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
Проверяет, ожидают ли какие-либо потоки указанного условия, связанного с этим синхронизатором. Поскольку тайм-ауты и прерывания могут произойти в любой момент, возвращаемое значение true не гарантирует, что будущий вызов signal разбудит какие-либо потоки. Этот метод предназначен главным образом для мониторинга состояния системы.
Параметры:
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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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