当前位置: 首页>>代码示例>>Java>>正文


Java Condition.await方法代码示例

本文整理汇总了Java中java.util.concurrent.locks.Condition.await方法的典型用法代码示例。如果您正苦于以下问题:Java Condition.await方法的具体用法?Java Condition.await怎么用?Java Condition.await使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在java.util.concurrent.locks.Condition的用法示例。


在下文中一共展示了Condition.await方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: awaitUntil

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
/**
 * {@inheritDoc}
 */
@Override
public void awaitUntil(SynchronizationEvent synchronizationEvent) throws InterruptedException, TimeoutException {
    logger.debug("Before await " + synchronizationEvent.isSatisfied());
    if (synchronizationEvent.isSatisfied()) {
        return;
    }

    lock.lock();

    Condition condition = lock.newCondition();
    eventConditionMap.put(synchronizationEvent, condition);

    logger.debug("When calling await " + synchronizationEvent.isSatisfied());
    boolean timedOut = !condition.await(timeoutInSeconds, TimeUnit.SECONDS);

    lock.unlock();

    if (timedOut) {
        logger.debug("After timeout " + synchronizationEvent.isSatisfied());
        logger.error("Condition {} timed out! ", synchronizationEvent.getName());
        throw new TimeoutException("The synchronization event " + synchronizationEvent.getName() + " was not satisfied in the specified time");
    }

}
 
开发者ID:hristo-vrigazov,项目名称:bromium,代码行数:28,代码来源:SignalizationBasedEventSynchronizer.java

示例2: wait

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
/**
 * Causes the current thread to wait until waiting time elapses.
 * 
 * @param timeout the maximum time to wait in milliseconds
 * 
 * @throws CdpException if the session held by another thread at the time of invocation.
 * 
 * @return this
 */
public Session wait(int timeout, boolean log) {
    if (lock.tryLock()) {
        Condition condition = lock.newCondition();
        try {
            if (log) {
                logEntry("wait", timeout + "ms");
            }
            condition.await(timeout, MILLISECONDS);
        } catch (InterruptedException e) {
            throw new CdpException(e);
        } finally {
            if (lock.isLocked()) {
                lock.unlock();
            }
        }
    } else {
        throw new CdpException("Unable to acquire lock");
    }
    return getThis();
}
 
开发者ID:webfolderio,项目名称:cdp4j,代码行数:30,代码来源:Session.java

示例3: await

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
/**
 * 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();
    }
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:27,代码来源:ReentrantReadWriteLockTest.java

示例4: startThrift

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
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");
    }
  }
}
 
开发者ID:HotelsDotCom,项目名称:beeju,代码行数:36,代码来源:ThriftHiveMetaStoreJUnitRule.java

示例5: verifyNamespacedListIsBackedUpIntoProperFiles_WhenNamespacedListIsReloaded

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
private void verifyNamespacedListIsBackedUpIntoProperFiles_WhenNamespacedListIsReloaded() throws Exception {
    deleteBackups();
    contextA.setNamespacedLists(Arrays.asList(new TestNamespacedList("integrationTest", "1", "2")));

    Lock listUpdateLock = new ReentrantLock();
    Condition updated = listUpdateLock.newCondition();
    newBatchAppliedListener.setCallback(event -> {
        log.info("Namespaced List updated in data store");
        if (event.getData().getNamespacedLists().containsKey("integrationTest")) {
            listUpdateLock.lock();
            try {
                updated.signalAll();
            } finally {
                listUpdateLock.unlock();
            }
        }
    });
    testHelperA.getDataStore().putNamespacedList();
    listUpdateLock.lock();
    try {
        updated.await(1, TimeUnit.SECONDS);
    } finally {
        listUpdateLock.unlock();
    }
    log.info("Unlocked test. Keep going");
    Thread.sleep(1000); // TODO: find better way to wait till all backup files are written

    Assert.assertTrue("Namespaced list backup is absent", Files.exists(Paths.get(currentPath + File.separator + "namespacedlists.json")));
}
 
开发者ID:Comcast,项目名称:redirector,代码行数:30,代码来源:BackupsIntegrationTest.java

示例6: backupsAreUpdatedAfterDataSourceComesUp

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
private void backupsAreUpdatedAfterDataSourceComesUp() throws Exception {
    TestContext context = contextBuilder.withNamespacedList(NAMESPACED_LIST, "new value").build();
    IntegrationTestHelper testHelper = prepareTestHelperForInitRedirectorModel(context);
    Lock lock = new ReentrantLock();
    Condition listUpdated = lock.newCondition();

    newBatchAppliedListener.setCallback(event -> {
        log.info("Namespaced Lists updated after zookeeper came up");
        lock.lock();
        try {
            listUpdated.signalAll();
        } finally {
            lock.unlock();
        }
    });

    dataStoreSupport.startZookeeper();
    testHelper.getDataStore().setupEnvForContext();
    lock.lock();
    try {
        listUpdated.await(3, TimeUnit.SECONDS);
    } finally {
        lock.unlock();
    }
    log.info("Unlocked test. Keep going");
    NamespacedListsBatch namespacedListsFromBackup = testHelper.getBackups().getNamespacedLists();
    Assert.assertTrue(namespacedListsFromBackup.getNamespacedLists().get(NAMESPACED_LIST).contains("new value"));
    Assert.assertFalse(namespacedListsFromBackup.getNamespacedLists().get(NAMESPACED_LIST).contains(NAMESPACED_LIST_VALUE));
}
 
开发者ID:Comcast,项目名称:redirector,代码行数:30,代码来源:NamespacedListsIntegrationTest.java

示例7: backupsAreUpdatedAfterNamespacedListIsChangedInDataStore

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
private void backupsAreUpdatedAfterNamespacedListIsChangedInDataStore() throws Exception {
    TestContext context = contextBuilder.withNamespacedList("NewList", "value1", "value2").build();
    IntegrationTestHelper testHelper = prepareTestHelperForUpdateRedirectorModel(context);
    Lock lock = new ReentrantLock();
    Condition listUpdated = lock.newCondition();

    newBatchAppliedListener.setCallback(unchecked(event -> {
        log.info("New namespaced list is applied: {}", event.getData().getNamespacedLists());
        if (event.getData() != null && event.getData().getNamespacedLists() != null) {
            if (event.getData().getNamespacedLists().containsKey("NewList")) {
                log.info("Event for update of new namespaced list happened. Continue processing");
            } else {
                log.info("Skip this event");
                return;
            }
        }

        lock.lock();
        try {
            listUpdated.signalAll();
        } finally {
            lock.unlock();
        }
    }));

    lock.lock();

    try {
        testHelper.getDataStore().putNamespacedList();
        if (listUpdated.await(1, TimeUnit.SECONDS)) {
            log.info("Namespaced list is applied. Going to verification");
        } else {
            log.info("Timeout exceed. Unlocking test");
        }
    } finally {
        lock.unlock();
    }

    NamespacedListsBatch namespacedListsFromBackup = testHelper.getBackups().getNamespacedLists();
    log.info("Got namespaced list from backup {}", namespacedListsFromBackup.getNamespacedLists());
    Assert.assertTrue(namespacedListsFromBackup.getNamespacedLists().get("NewList").contains("value1"));
    Assert.assertTrue(namespacedListsFromBackup.getNamespacedLists().get("NewList").contains("value2"));
}
 
开发者ID:Comcast,项目名称:redirector,代码行数:44,代码来源:NamespacedListsIntegrationTest.java

示例8: testGetWaitingThreads

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testGetWaitingThreads(boolean fair) {
    final PublicReentrantReadWriteLock lock =
        new PublicReentrantReadWriteLock(fair);
    final Condition c = lock.writeLock().newCondition();
    final CountDownLatch locked1 = new CountDownLatch(1);
    final CountDownLatch locked2 = new CountDownLatch(1);
    Thread t1 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.writeLock().lock();
            assertTrue(lock.getWaitingThreads(c).isEmpty());
            locked1.countDown();
            c.await();
            lock.writeLock().unlock();
        }});

    Thread t2 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.writeLock().lock();
            assertFalse(lock.getWaitingThreads(c).isEmpty());
            locked2.countDown();
            c.await();
            lock.writeLock().unlock();
        }});

    lock.writeLock().lock();
    assertTrue(lock.getWaitingThreads(c).isEmpty());
    lock.writeLock().unlock();

    t1.start();
    await(locked1);
    t2.start();
    await(locked2);

    lock.writeLock().lock();
    assertTrue(lock.hasWaiters(c));
    assertTrue(lock.getWaitingThreads(c).contains(t1));
    assertTrue(lock.getWaitingThreads(c).contains(t2));
    assertEquals(2, lock.getWaitingThreads(c).size());
    c.signalAll();
    assertHasNoWaiters(lock, c);
    lock.writeLock().unlock();

    awaitTermination(t1);
    awaitTermination(t2);

    assertHasNoWaiters(lock, c);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:48,代码来源:ReentrantReadWriteLockTest.java

示例9: testGetWaitQueueLength

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testGetWaitQueueLength(boolean fair) {
    final PublicReentrantLock lock = new PublicReentrantLock(fair);
    final Condition c = lock.newCondition();
    final CountDownLatch locked1 = new CountDownLatch(1);
    final CountDownLatch locked2 = new CountDownLatch(1);
    Thread t1 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            assertFalse(lock.hasWaiters(c));
            assertEquals(0, lock.getWaitQueueLength(c));
            locked1.countDown();
            c.await();
            lock.unlock();
        }});

    Thread t2 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            assertTrue(lock.hasWaiters(c));
            assertEquals(1, lock.getWaitQueueLength(c));
            locked2.countDown();
            c.await();
            lock.unlock();
        }});

    lock.lock();
    assertEquals(0, lock.getWaitQueueLength(c));
    lock.unlock();

    t1.start();
    await(locked1);

    lock.lock();
    assertHasWaiters(lock, c, t1);
    assertEquals(1, lock.getWaitQueueLength(c));
    lock.unlock();

    t2.start();
    await(locked2);

    lock.lock();
    assertHasWaiters(lock, c, t1, t2);
    assertEquals(2, lock.getWaitQueueLength(c));
    c.signalAll();
    assertHasNoWaiters(lock, c);
    lock.unlock();

    awaitTermination(t1);
    awaitTermination(t2);

    assertHasNoWaiters(lock, c);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:53,代码来源:ReentrantLockTest.java

示例10: testGetWaitingThreads

import java.util.concurrent.locks.Condition; //导入方法依赖的package包/类
public void testGetWaitingThreads(boolean fair) {
    final PublicReentrantLock lock = new PublicReentrantLock(fair);
    final Condition c = lock.newCondition();
    final CountDownLatch locked1 = new CountDownLatch(1);
    final CountDownLatch locked2 = new CountDownLatch(1);
    Thread t1 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            assertTrue(lock.getWaitingThreads(c).isEmpty());
            locked1.countDown();
            c.await();
            lock.unlock();
        }});

    Thread t2 = new Thread(new CheckedRunnable() {
        public void realRun() throws InterruptedException {
            lock.lock();
            assertFalse(lock.getWaitingThreads(c).isEmpty());
            locked2.countDown();
            c.await();
            lock.unlock();
        }});

    lock.lock();
    assertTrue(lock.getWaitingThreads(c).isEmpty());
    lock.unlock();

    t1.start();
    await(locked1);

    lock.lock();
    assertHasWaiters(lock, c, t1);
    assertTrue(lock.getWaitingThreads(c).contains(t1));
    assertFalse(lock.getWaitingThreads(c).contains(t2));
    assertEquals(1, lock.getWaitingThreads(c).size());
    lock.unlock();

    t2.start();
    await(locked2);

    lock.lock();
    assertHasWaiters(lock, c, t1, t2);
    assertTrue(lock.getWaitingThreads(c).contains(t1));
    assertTrue(lock.getWaitingThreads(c).contains(t2));
    assertEquals(2, lock.getWaitingThreads(c).size());
    c.signalAll();
    assertHasNoWaiters(lock, c);
    lock.unlock();

    awaitTermination(t1);
    awaitTermination(t2);

    assertHasNoWaiters(lock, c);
}
 
开发者ID:AdoptOpenJDK,项目名称:openjdk-jdk10,代码行数:55,代码来源:ReentrantLockTest.java


注:本文中的java.util.concurrent.locks.Condition.await方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。