|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjava.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",具体取决于队列是否为空。
Object 中的
toString
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
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。