use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class ConditionAbstractTest method testSignalAll.
@Test(timeout = 60000)
public void testSignalAll() throws InterruptedException {
ILock lock = callerInstance.getLock(newName());
ICondition condition = lock.newCondition(newName());
CountDownLatch allAwaited = new CountDownLatch(2);
CountDownLatch allSignalled = new CountDownLatch(2);
startThreadWaitingOnCondition(lock, condition, allAwaited, allSignalled);
startThreadWaitingOnCondition(lock, condition, allAwaited, allSignalled);
assertOpenEventually("All threads should have been reached await", allAwaited);
signalAll(lock, condition);
assertOpenEventually("All threads should have been signalled", allSignalled);
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class ConditionAbstractTest method testAwaitUntil_whenDeadLineInThePast.
@Test(timeout = 60000)
public void testAwaitUntil_whenDeadLineInThePast() throws InterruptedException {
ILock lock = callerInstance.getLock(newName());
ICondition condition = lock.newCondition(newName());
lock.lock();
assertFalse(condition.awaitUntil(currentTimeAfterGivenMillis(-1000)));
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class ConditionAbstractTest method testSignalAll_whenMultipleConditions.
@Test(timeout = 60000)
public void testSignalAll_whenMultipleConditions() throws InterruptedException {
ILock lock = callerInstance.getLock(newName());
ICondition condition0 = lock.newCondition(newName());
ICondition condition1 = lock.newCondition(newName());
CountDownLatch allAwaited = new CountDownLatch(2);
CountDownLatch allSignalled = new CountDownLatch(10);
startThreadWaitingOnCondition(lock, condition0, allAwaited, allSignalled);
startThreadWaitingOnCondition(lock, condition1, allAwaited, allSignalled);
assertOpenEventually("All threads should have been reached await", allAwaited);
signalAll(lock, condition0);
assertCountEventually("Condition has not been signalled", 9, allSignalled, THIRTY_SECONDS);
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class LegacyClientConditionTest method testLockConditionSignalAll.
@Test
public void testLockConditionSignalAll() throws InterruptedException {
final String name = "testLockConditionSimpleUsage";
final ILock lock = client.getLock(name);
final ICondition condition = lock.newCondition(name + "c");
final AtomicInteger count = new AtomicInteger(0);
final int k = 50;
final CountDownLatch awaitLatch = new CountDownLatch(k);
final CountDownLatch finalLatch = new CountDownLatch(k);
for (int i = 0; i < k; i++) {
new Thread(new Runnable() {
public void run() {
lock.lock();
try {
if (lock.isLockedByCurrentThread()) {
count.incrementAndGet();
}
awaitLatch.countDown();
condition.await();
if (lock.isLockedByCurrentThread()) {
count.incrementAndGet();
}
} catch (InterruptedException ignored) {
} finally {
lock.unlock();
finalLatch.countDown();
}
}
}).start();
}
awaitLatch.await(1, TimeUnit.MINUTES);
lock.lock();
condition.signalAll();
lock.unlock();
finalLatch.await(1, TimeUnit.MINUTES);
assertEquals(k * 2, count.get());
}
use of com.hazelcast.core.ILock in project hazelcast by hazelcast.
the class ClientConcurrentLockTest method concurrent_LockTest.
private void concurrent_LockTest(boolean tryLockWithTimeOut) throws InterruptedException {
final ILock lock = client.getLock(randomString());
final AtomicInteger upTotal = new AtomicInteger(0);
final AtomicInteger downTotal = new AtomicInteger(0);
LockTestThread[] threads = new LockTestThread[8];
for (int i = 0; i < threads.length; i++) {
LockTestThread t;
if (tryLockWithTimeOut) {
t = new TryLockWithTimeOutThread(lock, upTotal, downTotal);
} else {
t = new TryLockThread(lock, upTotal, downTotal);
}
t.start();
threads[i] = t;
}
assertJoinable(threads);
assertEquals("concurrent access to locked code caused wrong total", 0, upTotal.get() + downTotal.get());
}
Aggregations