Java 类java.util.concurrent.locks.Condition 实例源码
项目:dxram
文件:NIOConnection.java
NIOConnection(final short p_ownNodeId, final short p_destination, final int p_bufferSize, final int p_flowControlWindowSize,
final float p_flowControlWindowThreshold, final IncomingBufferQueue p_incomingBufferQueue, final MessageHeaderPool p_messageHeaderPool,
final MessageDirectory p_messageDirectory, final RequestMap p_requestMap, final MessageHandlers p_messageHandlers, final BufferPool p_bufferPool,
final AbstractExporterPool p_exporterPool, final NIOSelector p_nioSelector, final NodeMap p_nodeMap, final ReentrantLock p_lock,
final Condition p_cond) {
super(p_ownNodeId);
NIOFlowControl flowControl = new NIOFlowControl(p_destination, p_flowControlWindowSize, p_flowControlWindowThreshold, p_nioSelector, this);
NIOOutgoingRingBuffer outgoingBuffer = new NIOOutgoingRingBuffer(p_bufferSize, p_exporterPool);
NIOPipeIn pipeIn =
new NIOPipeIn(p_ownNodeId, p_destination, p_messageHeaderPool, flowControl, p_messageDirectory, p_requestMap, p_messageHandlers, p_bufferPool,
p_incomingBufferQueue, this);
NIOPipeOut pipeOut = new NIOPipeOut(p_ownNodeId, p_destination, p_bufferSize, flowControl, outgoingBuffer, p_nioSelector, p_nodeMap, this);
setPipes(pipeIn, pipeOut);
m_nioSelector = p_nioSelector;
m_connectionCondLock = p_lock;
m_connectionCond = p_cond;
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testSignalAll(boolean fair, final AwaitMethod awaitMethod) {
final PublicReentrantLock lock = new PublicReentrantLock(fair);
final Condition c = lock.newCondition();
final CountDownLatch pleaseSignal = new CountDownLatch(2);
class Awaiter extends CheckedRunnable {
public void realRun() throws InterruptedException {
lock.lock();
pleaseSignal.countDown();
await(c, awaitMethod);
lock.unlock();
}
}
Thread t1 = newStartedThread(new Awaiter());
Thread t2 = newStartedThread(new Awaiter());
await(pleaseSignal);
lock.lock();
assertHasWaiters(lock, c, t1, t2);
c.signalAll();
assertHasNoWaiters(lock, c);
lock.unlock();
awaitTermination(t1);
awaitTermination(t2);
}
项目:bromium
文件:SignalizationBasedEventSynchronizerTest.java
@Test
public void exceptionIsThrownAndEventIsCleanedUpIfAwaitTimesOut() throws TimeoutException, InterruptedException {
SynchronizationEvent synchronizationEvent = mock(SynchronizationEvent.class);
when(synchronizationEvent.isSatisfied()).thenReturn(false);
Condition condition = mock(Condition.class);
// condition#await returns false if time was exceeded
when(condition.await(timeout, TimeUnit.SECONDS)).thenReturn(false);
Lock lock = mock(Lock.class);
when(lock.newCondition()).thenReturn(condition);
SignalizationBasedEventSynchronizer signalizationBasedEventSynchronizer = new SignalizationBasedEventSynchronizer(timeout, lock);
expectedException.expect(TimeoutException.class);
signalizationBasedEventSynchronizer.awaitUntil(synchronizationEvent);
}
项目:bromium
文件:SignalizationBasedEventSynchronizerTest.java
@Test
public void ifIllegalStateExceptionIsThrownIsIsLocked() throws TimeoutException, InterruptedException {
SynchronizationEvent synchronizationEvent = mock(SynchronizationEvent.class);
when(synchronizationEvent.isSatisfied()).thenReturn(false);
Condition condition = mock(Condition.class);
doAnswer(invocationOnMock -> {
Thread.sleep(2000);
return false;
}).when(condition).await(timeout, TimeUnit.SECONDS);
Lock lock = mock(Lock.class);
when(lock.newCondition()).thenReturn(condition);
doNothing().doThrow(new IllegalMonitorStateException()).when(lock).lock();
SignalizationBasedEventSynchronizer signalizationBasedEventSynchronizer = new SignalizationBasedEventSynchronizer(timeout, lock);
Thread signalizingThread = new Thread(new SignalizingRunnable(signalizationBasedEventSynchronizer, synchronizationEvent));
expectedException.expect(TimeoutException.class);
signalizingThread.start();
signalizationBasedEventSynchronizer.awaitUntil(synchronizationEvent);
signalizingThread.join();
}
项目:unitimes
文件:MultiLock.java
public UnlockAll lockAll() {
iLock.lock();
try {
iLog.debug("Locking all ...");
while (iAllLocked != null)
iAllLocked.awaitUninterruptibly();
iAllLocked = iLock.newCondition();
while (!iIndividualLocks.isEmpty()) {
Condition otherCondition = iIndividualLocks.values().iterator().next();
otherCondition.awaitUninterruptibly();
}
iLog.debug("Locked: all");
return new UnlockAll();
} finally {
iLock.unlock();
}
}
项目:unitimes
文件:MultiLock.java
public Unlock lock(Collection<Long> ids) {
iLock.lock();
try {
if (ids == null || ids.isEmpty()) return new Unlock(ids);
iLog.debug("Locking " + ids + " ...");
Condition otherCondition = null;
while ((otherCondition = hasLock(ids)) != null)
otherCondition.awaitUninterruptibly();
Condition myCondition = iLock.newCondition();
for (Long id: ids)
iIndividualLocks.put(id, myCondition);
iLog.debug("Locked: " + ids);
return new Unlock(ids);
} finally {
iLock.unlock();
}
}
项目:OpenJSharp
文件:EventQueue.java
public EventQueue() {
for (int i = 0; i < NUM_PRIORITIES; i++) {
queues[i] = new Queue();
}
/*
* NOTE: if you ever have to start the associated event dispatch
* thread at this point, be aware of the following problem:
* If this EventQueue instance is created in
* SunToolkit.createNewAppContext() the started dispatch thread
* may call AppContext.getAppContext() before createNewAppContext()
* completes thus causing mess in thread group to appcontext mapping.
*/
appContext = AppContext.getAppContext();
pushPopLock = (Lock)appContext.get(AppContext.EVENT_QUEUE_LOCK_KEY);
pushPopCond = (Condition)appContext.get(AppContext.EVENT_QUEUE_COND_KEY);
}
项目:OpenJSharp
文件:AppContext.java
/**
* Constructor for AppContext. This method is <i>not</i> public,
* nor should it ever be used as such. The proper way to construct
* an AppContext is through the use of SunToolkit.createNewAppContext.
* A ThreadGroup is created for the new AppContext, a Thread is
* created within that ThreadGroup, and that Thread calls
* SunToolkit.createNewAppContext before calling anything else.
* That creates both the new AppContext and its EventQueue.
*
* @param threadGroup The ThreadGroup for the new AppContext
* @see sun.awt.SunToolkit
* @since 1.2
*/
AppContext(ThreadGroup threadGroup) {
numAppContexts.incrementAndGet();
this.threadGroup = threadGroup;
threadGroup2appContext.put(threadGroup, this);
this.contextClassLoader =
AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
// Initialize push/pop lock and its condition to be used by all the
// EventQueues within this AppContext
Lock eventQueuePushPopLock = new ReentrantLock();
put(EVENT_QUEUE_LOCK_KEY, eventQueuePushPopLock);
Condition eventQueuePushPopCond = eventQueuePushPopLock.newCondition();
put(EVENT_QUEUE_COND_KEY, eventQueuePushPopCond);
}
项目:openjdk-jdk10
文件:ZeroCoreThreads.java
void test(ScheduledThreadPoolExecutor p) throws Throwable {
Runnable dummy = new Runnable() { public void run() {
throw new AssertionError("shouldn't get here"); }};
BlockingQueue q = p.getQueue();
ReentrantLock lock = getField(q, "lock");
Condition available = getField(q, "available");
equal(0, p.getPoolSize());
equal(0, p.getLargestPoolSize());
equal(0L, p.getTaskCount());
equal(0L, p.getCompletedTaskCount());
p.schedule(dummy, 1L, HOURS);
// Ensure one pool thread actually waits in timed queue poll
awaitHasWaiters(lock, available, LONG_DELAY_MS);
equal(1, p.getPoolSize());
equal(1, p.getLargestPoolSize());
equal(1L, p.getTaskCount());
equal(0L, p.getCompletedTaskCount());
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testAwait(boolean fair) {
final PublicReentrantLock lock = new PublicReentrantLock(fair);
final Condition c = lock.newCondition();
final CountDownLatch locked = new CountDownLatch(1);
Thread t = newStartedThread(new CheckedRunnable() {
public void realRun() throws InterruptedException {
lock.lock();
locked.countDown();
c.await();
lock.unlock();
}});
await(locked);
lock.lock();
assertHasWaiters(lock, c, t);
c.signal();
assertHasNoWaiters(lock, c);
assertTrue(t.isAlive());
lock.unlock();
awaitTermination(t);
}
项目:jdk8u-jdk
文件:EventQueue.java
public EventQueue() {
for (int i = 0; i < NUM_PRIORITIES; i++) {
queues[i] = new Queue();
}
/*
* NOTE: if you ever have to start the associated event dispatch
* thread at this point, be aware of the following problem:
* If this EventQueue instance is created in
* SunToolkit.createNewAppContext() the started dispatch thread
* may call AppContext.getAppContext() before createNewAppContext()
* completes thus causing mess in thread group to appcontext mapping.
*/
appContext = AppContext.getAppContext();
pushPopLock = (Lock)appContext.get(AppContext.EVENT_QUEUE_LOCK_KEY);
pushPopCond = (Condition)appContext.get(AppContext.EVENT_QUEUE_COND_KEY);
}
项目:jdk8u-jdk
文件:AppContext.java
/**
* Constructor for AppContext. This method is <i>not</i> public,
* nor should it ever be used as such. The proper way to construct
* an AppContext is through the use of SunToolkit.createNewAppContext.
* A ThreadGroup is created for the new AppContext, a Thread is
* created within that ThreadGroup, and that Thread calls
* SunToolkit.createNewAppContext before calling anything else.
* That creates both the new AppContext and its EventQueue.
*
* @param threadGroup The ThreadGroup for the new AppContext
* @see sun.awt.SunToolkit
* @since 1.2
*/
AppContext(ThreadGroup threadGroup) {
numAppContexts.incrementAndGet();
this.threadGroup = threadGroup;
threadGroup2appContext.put(threadGroup, this);
this.contextClassLoader =
AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
// Initialize push/pop lock and its condition to be used by all the
// EventQueues within this AppContext
Lock eventQueuePushPopLock = new ReentrantLock();
put(EVENT_QUEUE_LOCK_KEY, eventQueuePushPopLock);
Condition eventQueuePushPopCond = eventQueuePushPopLock.newCondition();
put(EVENT_QUEUE_COND_KEY, eventQueuePushPopCond);
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
/**
* Awaits condition "indefinitely" using the specified AwaitMethod.
*/
void await(Condition c, AwaitMethod awaitMethod)
throws InterruptedException {
long timeoutMillis = 2 * LONG_DELAY_MS;
switch (awaitMethod) {
case await:
c.await();
break;
case awaitTimed:
assertTrue(c.await(timeoutMillis, MILLISECONDS));
break;
case awaitNanos:
long timeoutNanos = MILLISECONDS.toNanos(timeoutMillis);
long nanosRemaining = c.awaitNanos(timeoutNanos);
assertTrue(nanosRemaining > timeoutNanos / 2);
assertTrue(nanosRemaining <= timeoutNanos);
break;
case awaitUntil:
assertTrue(c.awaitUntil(delayedDate(timeoutMillis)));
break;
default:
throw new AssertionError();
}
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testGetWaitQueueLength(boolean fair) {
final PublicReentrantReadWriteLock lock =
new PublicReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
final CountDownLatch locked = new CountDownLatch(1);
Thread t = newStartedThread(new CheckedRunnable() {
public void realRun() throws InterruptedException {
lock.writeLock().lock();
assertEquals(0, lock.getWaitQueueLength(c));
locked.countDown();
c.await();
lock.writeLock().unlock();
}});
await(locked);
lock.writeLock().lock();
assertHasWaiters(lock, c, t);
assertEquals(1, lock.getWaitQueueLength(c));
c.signal();
assertHasNoWaiters(lock, c);
assertEquals(0, lock.getWaitQueueLength(c));
lock.writeLock().unlock();
awaitTermination(t);
}
项目:openjdk-jdk10
文件:AppContext.java
/**
* Constructor for AppContext. This method is <i>not</i> public,
* nor should it ever be used as such. The proper way to construct
* an AppContext is through the use of SunToolkit.createNewAppContext.
* A ThreadGroup is created for the new AppContext, a Thread is
* created within that ThreadGroup, and that Thread calls
* SunToolkit.createNewAppContext before calling anything else.
* That creates both the new AppContext and its EventQueue.
*
* @param threadGroup The ThreadGroup for the new AppContext
* @see sun.awt.SunToolkit
* @since 1.2
*/
AppContext(ThreadGroup threadGroup) {
numAppContexts.incrementAndGet();
this.threadGroup = threadGroup;
threadGroup2appContext.put(threadGroup, this);
this.contextClassLoader =
AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
});
// Initialize push/pop lock and its condition to be used by all the
// EventQueues within this AppContext
Lock eventQueuePushPopLock = new ReentrantLock();
put(EVENT_QUEUE_LOCK_KEY, eventQueuePushPopLock);
Condition eventQueuePushPopCond = eventQueuePushPopLock.newCondition();
put(EVENT_QUEUE_COND_KEY, eventQueuePushPopCond);
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testAwait(boolean fair) {
final PublicReentrantReadWriteLock lock =
new PublicReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
final CountDownLatch locked = new CountDownLatch(1);
Thread t = newStartedThread(new CheckedRunnable() {
public void realRun() throws InterruptedException {
lock.writeLock().lock();
locked.countDown();
c.await();
lock.writeLock().unlock();
}});
await(locked);
lock.writeLock().lock();
assertHasWaiters(lock, c, t);
c.signal();
assertHasNoWaiters(lock, c);
assertTrue(t.isAlive());
lock.writeLock().unlock();
awaitTermination(t);
}
项目:Reer
文件:DefaultFileSystemChangeWaiterFactory.java
private static void signal(Lock lock, Condition condition, Runnable runnable) {
boolean interrupted = Thread.interrupted();
lock.lock();
try {
runnable.run();
condition.signal();
} finally {
lock.unlock();
if (interrupted) {
Thread.currentThread().interrupt();
}
}
}
项目:Reer
文件:DefaultFileSystemChangeWaiterFactory.java
private static void signal(Lock lock, Condition condition) {
signal(lock, condition, new Runnable() {
@Override
public void run() {
}
});
}
项目:concurrentli
文件:ImminentEpochEvent.java
/**
* Creates a new instance, which will begin at the specified epoch and efficiently accommodate waiting for epochs up
* to (current epoch) + (horizon).
*
* @param horizon how far in the future an epoch can be waited for without sacrificing efficiency.
* @param epoch the initial epoch; must be at least -1
*/
public ImminentEpochEvent(int horizon, long epoch) {
if (epoch < -1) {
throw new IndexOutOfBoundsException("Initial epoch cannot be less than -1");
}
_locks = new ReentrantLock[horizon];
_conditions = new Condition[horizon];
_epoch = new AtomicLong(epoch);
for (int i = 0; i < _locks.length; i++) {
_locks[i] = new ReentrantLock();
_conditions[i] = _locks[i].newCondition();
}
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testHasWaitersIAE(boolean fair) {
final ReentrantLock lock = new ReentrantLock(fair);
final Condition c = lock.newCondition();
final ReentrantLock lock2 = new ReentrantLock(fair);
try {
lock2.hasWaiters(c);
shouldThrow();
} catch (IllegalArgumentException success) {}
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testAwaitNanos_Timeout(boolean fair) {
final ReentrantLock lock = new ReentrantLock(fair);
final Condition c = lock.newCondition();
final long timeoutMillis = timeoutMillis();
final long timeoutNanos = MILLISECONDS.toNanos(timeoutMillis);
lock.lock();
final long startTime = System.nanoTime();
try {
long nanosRemaining = c.awaitNanos(timeoutNanos);
assertTrue(nanosRemaining <= 0);
} catch (InterruptedException fail) { threadUnexpectedException(fail); }
assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
lock.unlock();
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testAwaitUntil_Timeout(boolean fair) {
final ReentrantLock lock = new ReentrantLock(fair);
final Condition c = lock.newCondition();
lock.lock();
// We shouldn't assume that nanoTime and currentTimeMillis
// use the same time source, so don't use nanoTime here.
final java.util.Date delayedDate = delayedDate(timeoutMillis());
try {
assertFalse(c.awaitUntil(delayedDate));
} catch (InterruptedException fail) { threadUnexpectedException(fail); }
assertTrue(new java.util.Date().getTime() >= delayedDate.getTime());
lock.unlock();
}
项目:beeju
文件:ThriftHiveMetaStoreJUnitRule.java
private void startThrift() throws Exception {
final Lock startLock = new ReentrantLock();
final Condition startCondition = startLock.newCondition();
final AtomicBoolean startedServing = new AtomicBoolean();
try (ServerSocket socket = new ServerSocket(0)) {
thriftPort = socket.getLocalPort();
}
conf.setVar(ConfVars.METASTOREURIS, getThriftConnectionUri());
final HiveConf hiveConf = new HiveConf(conf, HiveMetaStoreClient.class);
thriftServer.execute(new Runnable() {
@Override
public void run() {
try {
HadoopThriftAuthBridge bridge = new HadoopThriftAuthBridge23();
HiveMetaStore.startMetaStore(thriftPort, bridge, hiveConf, startLock, startCondition, startedServing);
} catch (Throwable e) {
LOG.error("Unable to start a Thrift server for Hive Metastore", e);
}
}
});
int i = 0;
while (i++ < 3) {
startLock.lock();
try {
if (startCondition.await(1, TimeUnit.MINUTES)) {
break;
}
} finally {
startLock.unlock();
}
if (i == 3) {
throw new RuntimeException("Maximum number of tries reached whilst waiting for Thrift server to be ready");
}
}
}
项目:openjdk-jdk10
文件:ZeroCoreThreads.java
static boolean hasWaiters(ReentrantLock lock, Condition condition) {
lock.lock();
try {
return lock.hasWaiters(condition);
} finally {
lock.unlock();
}
}
项目:flume-release-1.7.0
文件:AsyncHBaseSink.java
public SuccessCallback(Lock lck, AtomicInteger callbacksReceived,
Condition condition) {
lock = lck;
this.callbacksReceived = callbacksReceived;
this.condition = condition;
isTimeoutTesting = isTimeoutTest;
}
项目:flume-release-1.7.0
文件:AsyncHBaseSink.java
public FailureCallback(Lock lck, AtomicInteger callbacksReceived,
AtomicBoolean txnFail, Condition condition) {
this.lock = lck;
this.callbacksReceived = callbacksReceived;
this.txnFail = txnFail;
this.condition = condition;
isTimeoutTesting = isTimeoutTest;
}
项目:lams
文件:WaitingThread.java
/**
* Creates a new entry for a waiting thread.
*
* @param cond the condition for which to wait
* @param pool the pool on which the thread will be waiting,
* or <code>null</code>
*/
public WaitingThread(Condition cond, RouteSpecificPool pool) {
if (cond == null) {
throw new IllegalArgumentException("Condition must not be null.");
}
this.cond = cond;
this.pool = pool;
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testHasWaitersIMSE(boolean fair) {
final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
try {
lock.hasWaiters(c);
shouldThrow();
} catch (IllegalMonitorStateException success) {}
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testGetWaitingThreadsIAE(boolean fair) {
final PublicReentrantReadWriteLock lock =
new PublicReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
final PublicReentrantReadWriteLock lock2 =
new PublicReentrantReadWriteLock(fair);
try {
lock2.getWaitingThreads(c);
shouldThrow();
} catch (IllegalArgumentException success) {}
}
项目:FirefoxData-android
文件:WaitingThread.java
/**
* Creates a new entry for a waiting thread.
*
* @param cond the condition for which to wait
* @param pool the pool on which the thread will be waiting,
* or <code>null</code>
*/
public WaitingThread(final Condition cond, final RouteSpecificPool pool) {
Args.notNull(cond, "Condition");
this.cond = cond;
this.pool = pool;
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testGetWaitQueueLengthIAE(boolean fair) {
final ReentrantLock lock = new ReentrantLock(fair);
final Condition c = lock.newCondition();
final ReentrantLock lock2 = new ReentrantLock(fair);
try {
lock2.getWaitQueueLength(c);
shouldThrow();
} catch (IllegalArgumentException success) {}
}
项目:unitimes
文件:MultiLock.java
private Condition hasLock(Collection<Long> ids) {
if (iAllLocked != null) return iAllLocked;
for (Long id: ids) {
Condition c = iIndividualLocks.get(id);
if (c != null) return c;
}
return null;
}
项目:unitimes
文件:MultiLock.java
public void unlockAll() {
iLock.lock();
try {
iLog.debug("Unlocking all ...");
Condition allLocked = iAllLocked;
iAllLocked = null;
allLocked.signalAll();
iLog.debug("Unlocked: all");
} finally {
iLock.unlock();
}
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testGetWaitQueueLengthIAE(boolean fair) {
final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock(fair);
try {
lock2.getWaitQueueLength(c);
shouldThrow();
} catch (IllegalArgumentException success) {}
}
项目:openjdk-jdk10
文件:ReentrantReadWriteLockTest.java
public void testGetWaitingThreadsIMSE(boolean fair) {
final PublicReentrantReadWriteLock lock =
new PublicReentrantReadWriteLock(fair);
final Condition c = lock.writeLock().newCondition();
try {
lock.getWaitingThreads(c);
shouldThrow();
} catch (IllegalMonitorStateException success) {}
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testGetWaitingThreadsIAE(boolean fair) {
final PublicReentrantLock lock = new PublicReentrantLock(fair);
final Condition c = lock.newCondition();
final PublicReentrantLock lock2 = new PublicReentrantLock(fair);
try {
lock2.getWaitingThreads(c);
shouldThrow();
} catch (IllegalArgumentException success) {}
}
项目:dble
文件:BaseHandlerBuilder.java
private void handleSubQueryForExplain(final ReentrantLock lock, final Condition finishSubQuery, final AtomicBoolean finished,
final AtomicInteger subNodes, final PlanNode planNode, final SubQueryHandler tempHandler) {
tempHandler.setForExplain();
BaseHandlerBuilder builder = hBuilder.getBuilder(session, planNode, true);
DMLResponseHandler endHandler = builder.getEndHandler();
endHandler.setNextHandler(tempHandler);
this.getSubQueryBuilderList().add(builder);
subQueryFinished(subNodes, lock, finished, finishSubQuery);
return;
}
项目:openjdk-jdk10
文件:ReentrantLockTest.java
public void testGetWaitQueueLengthIMSE(boolean fair) {
final ReentrantLock lock = new ReentrantLock(fair);
final Condition c = lock.newCondition();
try {
lock.getWaitQueueLength(c);
shouldThrow();
} catch (IllegalMonitorStateException success) {}
}
项目:kafka-0.11.0.0-src-with-comment
文件:BufferPoolTest.java
/**
* Test if the waiter that is waiting on availability of more memory is cleaned up when an interruption occurs
*/
@Test
public void testCleanupMemoryAvailabilityWaiterOnInterruption() throws Exception {
BufferPool pool = new BufferPool(2, 1, metrics, time, metricGroup);
long blockTime = 5000;
pool.allocate(1, maxBlockTimeMs);
Thread t1 = new Thread(new BufferPoolAllocator(pool, blockTime));
Thread t2 = new Thread(new BufferPoolAllocator(pool, blockTime));
// start thread t1 which will try to allocate more memory on to the Buffer pool
t1.start();
// sleep for 500ms. Condition variable c1 associated with pool.allocate() by thread t1 will be inserted in the waiters queue.
Thread.sleep(500);
Deque<Condition> waiters = pool.waiters();
// get the condition object associated with pool.allocate() by thread t1
Condition c1 = waiters.getFirst();
// start thread t2 which will try to allocate more memory on to the Buffer pool
t2.start();
// sleep for 500ms. Condition variable c2 associated with pool.allocate() by thread t2 will be inserted in the waiters queue. The waiters queue will have 2 entries c1 and c2.
Thread.sleep(500);
t1.interrupt();
// sleep for 500ms.
Thread.sleep(500);
// get the condition object associated with allocate() by thread t2
Condition c2 = waiters.getLast();
t2.interrupt();
assertNotEquals(c1, c2);
t1.join();
t2.join();
// both the allocate() called by threads t1 and t2 should have been interrupted and the waiters queue should be empty
assertEquals(pool.queued(), 0);
}
项目:jdk8u-jdk
文件:SynchronizerLockingThread.java
protected void setExpectedResult(Lock waitingLock,
int numOwnedMonitors,
Map<String, Lock[]> ownedMonitors,
Condition waitingSync,
int numOwnedSyncs,
Map<String, ReentrantLock[]> ownedSyncs) {
this.waitingLock = waitingLock;
this.numOwnedMonitors = numOwnedMonitors;
this.ownedMonitors = ownedMonitors;
this.waitingSync = waitingSync;
this.numOwnedSyncs = numOwnedSyncs;
this.ownedSyncs = ownedSyncs;
}