Search in sources :

Example 36 with ICondition

use of com.hazelcast.core.ICondition 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);
}
Also used : ILock(com.hazelcast.core.ILock) CountDownLatch(java.util.concurrent.CountDownLatch) ICondition(com.hazelcast.core.ICondition) Test(org.junit.Test)

Example 37 with ICondition

use of com.hazelcast.core.ICondition in project hazelcast by hazelcast.

the class ConditionAbstractTest method testSignalWithSingleWaiter.

@Test(timeout = 60000)
public void testSignalWithSingleWaiter() throws InterruptedException {
    String lockName = newName();
    String conditionName = newName();
    final ILock lock = callerInstance.getLock(lockName);
    final ICondition condition = lock.newCondition(conditionName);
    final AtomicInteger count = new AtomicInteger(0);
    final CountDownLatch threadLockedTheLock = new CountDownLatch(1);
    Thread t = new Thread(new Runnable() {

        public void run() {
            try {
                lock.lock();
                if (lock.isLockedByCurrentThread()) {
                    count.incrementAndGet();
                }
                threadLockedTheLock.countDown();
                condition.await();
                if (lock.isLockedByCurrentThread()) {
                    count.incrementAndGet();
                }
            } catch (InterruptedException ignored) {
            } finally {
                lock.unlock();
            }
        }
    });
    t.start();
    threadLockedTheLock.await();
    assertUnlockedEventually(lock, THIRTY_SECONDS);
    signal(lock, condition);
    assertAtomicEventually("Locks was not always locked by the expected thread", 2, count, THIRTY_SECONDS);
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ILock(com.hazelcast.core.ILock) CountDownLatch(java.util.concurrent.CountDownLatch) ICondition(com.hazelcast.core.ICondition) TestThread(com.hazelcast.test.TestThread) Test(org.junit.Test)

Aggregations

ICondition (com.hazelcast.core.ICondition)37 Test (org.junit.Test)36 ILock (com.hazelcast.core.ILock)33 CountDownLatch (java.util.concurrent.CountDownLatch)22 ParallelTest (com.hazelcast.test.annotation.ParallelTest)11 QuickTest (com.hazelcast.test.annotation.QuickTest)11 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)8 HazelcastInstance (com.hazelcast.core.HazelcastInstance)6 TestThread (com.hazelcast.test.TestThread)6 TestHazelcastInstanceFactory (com.hazelcast.test.TestHazelcastInstanceFactory)4 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)3 AssertTask (com.hazelcast.test.AssertTask)2 Config (com.hazelcast.config.Config)1 ExecutorService (java.util.concurrent.ExecutorService)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Ignore (org.junit.Ignore)1