java.lang.Object java.util.concurrent.locks.AbstractOwnableSynchronizer java.util.concurrent.locks.AbstractQueuedLongSynchronizer
public abstract class AbstractQueuedLongSynchronizer
以 long 形式维护同步状态的一个 AbstractQueuedSynchronizer
版本。此类具有的结构、属性和方法与 AbstractQueuedSynchronizer 完全相同,但所有与状态相关的参数和结果都定义为 long 而不是 int。当创建需要 64 位状态的多级别锁和屏障等同步器时,此类很有用。
有关用法说明和示例,请参阅 AbstractQueuedSynchronizer
。
嵌套类摘要 | |
---|---|
class |
AbstractQueuedLongSynchronizer.ConditionObject 作为 Lock 实现基础的 AbstractQueuedLongSynchronizer 的条件实现。 |
构造方法摘要 | |
---|---|
protected |
AbstractQueuedLongSynchronizer() 创建一个初始同步状态为 0 的新 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() 返回一个 collection,该 collection 包含正以独占模式等待获取的线程。 |
Thread |
getFirstQueuedThread() 返回队列中第一个(等待时间最长的)线程;如果当前没有将任何线程加入队列,则返回 null 。 |
Collection<Thread> |
getQueuedThreads() 返回一个 collection,该 collection 包含正在等待获取的线程。 |
int |
getQueueLength() 返回等待获取的线程估计数。 |
Collection<Thread> |
getSharedQueuedThreads() 返回一个 collection,该 collection 包含正以共享模式等待获取的线程。 |
protected long |
getState() 返回同步状态的当前值。 |
Collection<Thread> |
getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition) 返回一个 collection,该 collection 包含那些正在与此同步器关联的给定条件上等待的线程。 |
int |
getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition) 返回正在与此同步器关联的给定条件上等待的线程估计数。 |
boolean |
hasContended() 查询是否有线程曾经为获取此同步器而发生争用;也就是说,是否某个 acquire 方法曾被阻塞。 |
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 |
构造方法详细信息 |
---|
protected AbstractQueuedLongSynchronizer()
方法详细信息 |
---|
protected final long getState()
protected final void setState(long newState)
newState
- 新的状态值
protected final boolean compareAndSetState(long expect, long update)
expect
- 预期值
update
- 新值
protected boolean tryAcquire(long arg)
此方法总是由执行获取的线程调用。如果此方法报告失败,则 acquire 方法可以将线程加入队列(如果它还没有加入队列),直到收到其他线程的释放信号为止。可以使用此方法来实现 Lock.tryLock()
方法。
默认实现将抛出 UnsupportedOperationException
。
arg
- 获取参数。此值总是传递给 acquire 方法的那个值,或者是保存在某个条件等待条目上的值。该值在其他方面没有解释,可以表示任何内容。
true
。在成功时,此对象已经被获取。
IllegalMonitorStateException
- 如果获取操作会将此同步器变为非法状态。为了同步的正常运行,必须以统一的方式抛出此异常。
UnsupportedOperationException
- 如果不支持独占模式
protected boolean tryRelease(long arg)
此方法总是由执行释放的线程调用。
默认实现将抛出 UnsupportedOperationException
。
arg
- 释放参数。此值总是传递给 release 方法的那个值,或者是某个条件等待条目上的当前状态值。该值在其他方面没有解释,可以表示任何内容。
true
;否则返回
false
。
IllegalMonitorStateException
- 如果释放操作会将此同步器变为非法状态。为了同步的正常运行,必须以统一的方式抛出此异常。
UnsupportedOperationException
- 如果不支持独占模式
protected long tryAcquireShared(long arg)
此方法总是由执行获取的线程调用。如果此方法报告失败,则 acquire 方法可以将线程加入队列(如果它还没有加入队列),直到收到其他线程的释放信号为止。
默认实现将抛出 UnsupportedOperationException
。
arg
- 获取参数。此值总是传递给 acquire 方法的那个值,或者是保存在某个条件等待条目上的值。该值在其他方面没有解释,可以表示任何内容。
IllegalMonitorStateException
- 如果获取操作会将此同步器变为非法状态。为了同步的正常运行,必须以统一的方式抛出此异常。
UnsupportedOperationException
- 如果不支持共享模式
protected boolean tryReleaseShared(long arg)
此方法总是由执行释放的线程调用。
默认实现将抛出 UnsupportedOperationException
。
arg
- 释放参数。此值总是传递给 release 方法的那个值,或者是某个条件等待条目上的当前状态值。该值在其他方面没有解释,可以表示任何内容。
true
;否则返回
false
IllegalMonitorStateException
- 如果释放操作会将此同步器变为非法状态。为了同步的正常运行,必须以统一的方式抛出此异常。
UnsupportedOperationException
- 如果不支持共享模式
protected boolean isHeldExclusively()
true
。此方法是在每次调用非等待
AbstractQueuedLongSynchronizer.ConditionObject
方法时调用的。(等待方法则调用
release(long)
。)
默认实现将抛出 UnsupportedOperationException
。此方法只在 AbstractQueuedLongSynchronizer.ConditionObject
方法中进行内部调用,因此,如果不使用条件,则不需要定义它。
true
;否则返回
false
UnsupportedOperationException
- 如果不支持这些条件
public final void acquire(long arg)
tryAcquire(long)
,并在成功时返回。否则,在成功之前,线程将加入队列,可能反复处于阻塞或未阻塞状态,并一直调用
tryAcquire(long)
。可以使用此方法来实现
Lock.lock()
方法。
arg
- 获取参数。此值被传送给
tryAcquire(long)
,但在其他方面没有解释,可以表示任何内容。
public final void acquireInterruptibly(long arg) throws InterruptedException
tryAcquire(long)
,并在成功时返回。否则,在成功或线程中断之前,线程将加入队列,可能反复处于阻塞或未阻塞状态,并一直调用
tryAcquire(long)
。可以使用此方法来实现
Lock.lockInterruptibly()
方法。
arg
- 获取参数。此值被传送给
tryAcquire(long)
,但在其他方面没有解释,可以表示任何内容。
InterruptedException
- 如果当前线程被中断
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)
返回的值
public final void acquireShared(long arg)
tryAcquireShared(long)
,并在成功时返回。否则,在成功之前,线程将加入队列,可能反复处于阻塞或未阻塞状态,并一直调用
tryAcquireShared(long)
。
arg
- 获取参数。此值被传送给
tryAcquireShared(long)
,但在其他方面没有解释,可以表示任何内容。
public final void acquireSharedInterruptibly(long arg) throws InterruptedException
tryAcquireShared(long)
,并在成功时返回。否则,在成功或线程中断之前,线程将加入队列,可能反复处于阻塞或未阻塞状态,并一直调用
tryAcquireShared(long)
。
arg
- 获取参数。此值被传送给
tryAcquireShared(long)
,但在其他方面没有解释,可以表示任何内容。
InterruptedException
- 如果当前线程被中断
public final boolean tryAcquireSharedNanos(long arg, long nanosTimeout) throws InterruptedException
tryAcquireShared(long)
,并在成功时返回。否则,在成功、线程中断或超过超时期之前,线程将加入队列,可能反复处于阻塞或未阻塞状态,并一直调用
tryAcquireShared(long)
。
arg
- 获取参数。此值被传送给
tryAcquireShared(long)
,但在其他方面没有解释,可以表示任何内容。
nanosTimeout
- 等待的最大毫微秒数
true
;如果超时,则返回
false
InterruptedException
- 如果当前线程被中断
public final boolean releaseShared(long arg)
tryReleaseShared(long)
返回 true,则通过取消一个或多个线程的阻塞来实现此方法。
arg
- 释放参数。此值被传送给
tryReleaseShared(long)
,但在其他方面没有解释,可以表示任何内容。
tryReleaseShared(long)
中返回的值
public final boolean hasQueuedThreads()
true
并不能保证任何其他线程能一直获取。
在此实现中,此操作是以固定时间返回的。
true
public final boolean hasContended()
在此实现中,此操作是以固定时间返回的。
true
public final Thread getFirstQueuedThread()
null
。
在此实现中,此操作通常是以固定时间返回的,但是,如果其他线程正在并发修改该队列,则可能出现循环争用。
null
public final boolean isQueued(Thread thread)
此实现将遍历队列,以确定给定线程是否存在。
thread
- 线程
true
NullPointerException
- 如果线程为 null
public final int getQueueLength()
public final Collection<Thread> getQueuedThreads()
public final Collection<Thread> getExclusiveQueuedThreads()
getQueuedThreads()
相同,但它只返回那些因独占获取而等待的线程。
public final Collection<Thread> getSharedQueuedThreads()
getQueuedThreads()
相同,但它只返回那些因共享获取而等待的线程。
public String toString()
"State ="
,后跟
getState()
的当前值,再后面是
"nonempty"
或
"empty"
,具体取决于队列是否为空。
public final boolean owns(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
NullPointerException
- 如果 condition 为 null
public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
IllegalMonitorStateException
- 如果不进行独占同步
IllegalArgumentException
- 如果给定条件与此同步器没有关联
NullPointerException
- 如果 condition 为 null
public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
IllegalMonitorStateException
- 如果不进行独占同步
IllegalArgumentException
- 如果给定条件与此同步器没有关联
NullPointerException
- 如果 condition 为 null
public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
IllegalMonitorStateException
- 如果不进行独占同步
IllegalArgumentException
- 如果给定条件与此同步器没有关联
NullPointerException
- 如果 condition 为 null