@Override public void run() { try { command.run(); } finally { active.countDown(); } } };
/** It will wait all threads to finish */ public boolean join(int timeout, TimeUnit timeUnit) { try { return active.await(timeout, timeUnit); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return false; } }
/** * @param credits */ private void sendCredits(final int credits) { pendingFlowControl.countUp(); flowControlExecutor.execute(new Runnable() { @Override public void run() { try { sessionContext.sendConsumerCredits(ClientConsumerImpl.this, credits); } finally { pendingFlowControl.countDown(); } } }); }
@Test public void testLatchOnSingleThread() throws Exception { ReusableLatch latch = new ReusableLatch(); for (int i = 1; i <= 100; i++) { latch.countUp(); Assert.assertEquals(i, latch.getCount()); } for (int i = 100; i > 0; i--) { Assert.assertEquals(i, latch.getCount()); latch.countDown(); Assert.assertEquals(i - 1, latch.getCount()); } latch.await(); }
@Test public void testUsingOwnExecutorsOnDemand() throws Throwable { final ReusableLatch latch = new ReusableLatch(1); final ActiveMQScheduledComponent local = new ActiveMQScheduledComponent(10, TimeUnit.MILLISECONDS, true) { @Override public void run() { latch.countDown(); } }; local.start(); local.start(); // should be ok to call start again try { Assert.assertFalse(latch.await(20, TimeUnit.MILLISECONDS)); local.delay(); Assert.assertTrue(latch.await(20, TimeUnit.MILLISECONDS)); latch.setCount(1); Assert.assertFalse(latch.await(20, TimeUnit.MILLISECONDS)); // re-scheduling the executor at a big interval.. // just to make sure it won't hung local.setTimeUnit(TimeUnit.HOURS); local.setPeriod(1); } finally { local.stop(); local.stop(); // calling stop again should not be an issue. } }
@Override public int sendMessage(MessageReference ref, Message message, ServerConsumer consumer, int deliveryCount) { inCall.countDown(); try { callbackSemaphore.acquire(); } catch (InterruptedException e) { inCall.countUp(); return -1; } try { return targetCallback.sendMessage(ref, message, consumer, deliveryCount); } finally { callbackSemaphore.release(); inCall.countUp(); } }
ReusableLatch latchSends = new ReusableLatch(NUMBER_OF_SENDERS); Assert.assertTrue(latchSends.await(1, TimeUnit.MINUTES)); latchSends.countUp(); assertTrue(latchSends.await(10, TimeUnit.SECONDS));
final ReusableLatch latch = new ReusableLatch(0); for (int i = 0; i < blocks; i++) { bufferBlock.position(0); latch.countUp(); long startWrite = 0; file.writeDirect(bufferBlock, true, callback);
private void internalTest(ReloadManagerImpl manager, File file) throws IOException, InterruptedException { file.createNewFile(); final ReusableLatch latch = new ReusableLatch(1); manager.addCallback(file.toURL(), new ReloadCallback() { @Override public void reload(URL uri) { latch.countDown(); } }); Assert.assertFalse(latch.await(1, TimeUnit.SECONDS)); file.setLastModified(System.currentTimeMillis()); Assert.assertTrue(latch.await(1, TimeUnit.SECONDS)); } }
public ProducerThread setFinished(int value) { finished.setCount(value); return this; }
private final ReusableLatch deliveriesInTransit = new ReusableLatch(0);
@Test public void testLatchWithParameterizedDown() throws Exception { ReusableLatch latch = new ReusableLatch(1000); latch.countDown(5000); assertTrue(latch.await(1000)); assertEquals(0, latch.getCount()); }
final ReusableLatch latch = new ReusableLatch(5); storeMonitor.addStore(getTestDirfile()); storeMonitor.addCallback(new FileStoreMonitor.Callback() { storeMonitor.start(); Assert.assertTrue(latch.await(1, TimeUnit.SECONDS)); latch.setCount(1); Assert.assertFalse(latch.await(100, TimeUnit.MILLISECONDS));
@Test public void testReferenceValidExecutorUsed() throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(ActiveMQThreadFactory.defaultThreadFactory()); LatchRunner runner = new LatchRunner(); ReferenceCounterUtil counter = new ReferenceCounterUtil(runner, executor); counter.increment(); counter.decrement(); runner.latch.await(5, TimeUnit.SECONDS); assertNotSame(runner.lastThreadUsed, Thread.currentThread()); runner.latch.setCount(1); runner.lastThreadUsed = Thread.currentThread(); // force a recheck counter.check(); runner.latch.await(5, TimeUnit.SECONDS); assertNotSame(runner.lastThreadUsed, Thread.currentThread()); executor.shutdown(); }
@Override public boolean intercept(final Packet packet, final RemotingConnection connection) throws ActiveMQException { if (packet instanceof SessionReceiveMessage) { System.out.println("Receiving message"); try { reusableLatch.countDown(); semaphore.acquire(); semaphore.release(); reusableLatch.countUp(); } catch (Exception e) { e.printStackTrace(); } } if (pendingException != null) { ActiveMQException exToThrow = pendingException; pendingException = null; throw exToThrow; } return true; }
final ReusableLatch latch = new ReusableLatch(0); for (int i = 0; i < blocks; i++) { bufferBlock.position(0); latch.countUp(); long startWrite = 0; file.writeDirect(bufferBlock, true, callback);
public ProducerThread setFinished(int value) { finished.setCount(value); return this; }
private final ReusableLatch activationLatch = new ReusableLatch(0);