public abstract class AbstractQueuedLongSynchronizer extends AbstractOwnableSynchronizer implements Serializable
AbstractQueuedSynchronizer
的一个版本,其中同步状态保持为long
。
此类具有完全相同的结构,属性和为方法AbstractQueuedSynchronizer
与所有的状态有关的参数和结果被定义为例外long
而非int
。
当创建同步器(例如需要64位状态的多级锁和障碍)时,此类可能很有用。
有关使用说明和示例,请参阅AbstractQueuedSynchronizer
。
Modifier and Type | Class and Description |
---|---|
class |
AbstractQueuedLongSynchronizer.ConditionObject
Condition实现 AbstractQueuedLongSynchronizer 作为基础Lock 实施。
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractQueuedLongSynchronizer()
创建一个初始同步状态为零的新的
AbstractQueuedLongSynchronizer 实例。
|
Modifier and Type | Method and Description |
---|---|
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)
尝试将状态设置为以共享模式反映发布。
|
getExclusiveOwnerThread, setExclusiveOwnerThread
protected AbstractQueuedLongSynchronizer()
AbstractQueuedLongSynchronizer
实例。
protected final long getState()
volatile
读取的内存语义。
protected final void setState(long newState)
volatile
写入的记忆语义。
newState
- 新的状态值
protected final boolean compareAndSetState(long expect, long update)
volatile
读写的记忆语义。
expect
- 预期值
update
- 新价值
true
如果成功。
False return表示实际值不等于预期值。
protected boolean tryAcquire(long arg)
该方法总是由执行获取的线程调用。 如果此方法报告失败,则获取方法可能将线程排队(如果尚未排队),直到被其他线程释放为止。 这可以用于实现方法Lock.tryLock()
。
默认实现会抛出UnsupportedOperationException
。
arg
- 获取的论据。
该值始终是传递给获取方法的值,或者是进入条件等待时保存的值。
该值否则无法解释,可以代表您喜欢的任何内容。
true
如果成功。
一旦成功,这个对象就被收购了。
IllegalMonitorStateException
- 如果获取将使该同步器处于非法状态。
必须以一致的方式抛出此异常,以使同步正常工作。
UnsupportedOperationException
- 如果不支持排他模式
protected boolean tryRelease(long arg)
arg
- 释放参数。
该值始终是传递给release方法的值,或者进入条件等待时的当前状态值。
该值否则无法解释,可以代表您喜欢的任何内容。
true
如果此对象现在处于完全释放状态,以便任何等待的线程可能尝试获取;
和false
否则。
IllegalMonitorStateException
- 如果释放将使此同步器处于非法状态。
必须以一致的方式抛出此异常,以使同步正常工作。
UnsupportedOperationException
- 如果不支持独占模式
protected long tryAcquireShared(long arg)
该方法总是由执行获取的线程调用。 如果此方法报告失败,则获取方法可能将线程排队(如果尚未排队),直到被其他线程释放为止。
默认实现会抛出UnsupportedOperationException
。
arg
- 获取的论据。
该值始终是传递给获取方法的值,或者是进入条件等待时保存的值。
该值否则无法解释,可以代表您喜欢的任何内容。
IllegalMonitorStateException
- 如果获取将使该同步器处于非法状态。
必须以一致的方式抛出此异常,以使同步正常工作。
UnsupportedOperationException
- 如果不支持共享模式
protected boolean tryReleaseShared(long arg)
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)
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
返回不能保证任何其他线程将获得。
在这个实现中,这个操作返回恒定的时间。
true
如果可能有其他线程等待获取
public final boolean hasContended()
在这个实现中,这个操作返回恒定的时间。
true
如果有
true
话
public final Thread getFirstQueuedThread()
null
如果没有线程正在排队。
在这个实现中,这个操作通常在常量时间内返回,但如果其他线程同时修改队列,则可以在争用时迭代。
null
如果没有线程当前排队
public final boolean isQueued(Thread thread)
该实现遍历队列以确定给定线程的存在。
thread
- 线程
true
如果给定的线程在队列上
NullPointerException
- 如果线程为空
public final boolean hasQueuedPredecessors()
调用此方法等同于(但可能更有效):
getFirstQueuedThread() != Thread.currentThread() && hasQueuedThreads()
请注意,因为由于中断和超时而导致的取消可能随时发生,所以true
返回不能保证其他一些线程将在当前线程之前获取。 同样,由于队列为空,这个方法返回了false
之后,另一个线程可能会赢得比赛排队。
该方法被设计为由一个公平的同步器使用以避免barging 。 这样一个同步器的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
如果当前线程
true
有一个排队的线程,而
false
如果当前线程在队列的头部或队列是空的
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
- 条件
true
如果拥有
NullPointerException
- 如果条件为空
public final boolean hasWaiters(AbstractQueuedLongSynchronizer.ConditionObject condition)
true
返回并不能保证未来的signal
将唤醒任何线程。
该方法主要用于监视系统状态。
condition
- 条件
true
如果有任何等待线程
IllegalMonitorStateException
- 如果不保持独占同步
IllegalArgumentException
- 如果给定的条件与该同步器没有关联
NullPointerException
- 如果条件为空
public final int getWaitQueueLength(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
IllegalMonitorStateException
- 如果不保留独占同步
IllegalArgumentException
- 如果给定条件与此同步器没有关联
NullPointerException
- 如果条件为空
public final Collection<Thread> getWaitingThreads(AbstractQueuedLongSynchronizer.ConditionObject condition)
condition
- 条件
IllegalMonitorStateException
- 如果不保留独占同步
IllegalArgumentException
- 如果给定的条件与该同步器没有关联
NullPointerException
- 如果条件为空