public void testBackgroundTasks() throws Exception { SemaphoreCompletionService<String> completionService = new SemaphoreCompletionService<>(executor2Threads, 1); CountDownLatch latch = new CountDownLatch(1); Future<String> backgroundInitFuture = completionService.submit(new BackgroundInitTask(completionService)); assertEquals("bla", backgroundInitFuture.get(1, SECONDS)); Future<String> dummyFuture = completionService.submit(new DummyTask()); assertSame(backgroundInitFuture, completionService.poll(1, SECONDS)); assertFalse(dummyFuture.isDone()); Future<String> backgroundEndFuture = completionService.backgroundTaskFinished(new BlockingTask(latch)); assertNull(completionService.poll(1, SECONDS)); assertFalse(dummyFuture.isDone()); latch.countDown(); assertEquals("bla", backgroundEndFuture.get(10, SECONDS)); assertEquals("bla", dummyFuture.get(10, SECONDS)); }
public void testConcurrency1WithinThread() throws Exception { SemaphoreCompletionService<String> completionService = new SemaphoreCompletionService<>(new WithinThreadExecutor(), 1); Future<String> future1 = completionService.submit(new DummyTask()); Future<String> future2 = completionService.poll(); assertSame(future1, future2); assertNotNull(future2); assertEquals("bla", future2.get()); }
public void testConcurrencyLimit() throws Exception { SemaphoreCompletionService<String> completionService = new SemaphoreCompletionService<>(executor2Threads, 1); CountDownLatch latch = new CountDownLatch(1); Future<String> blockingFuture = completionService.submit(new BlockingTask(latch)); Future<String> dummyFuture = completionService.submit(new DummyTask()); assertNull(completionService.poll(1, SECONDS)); assertFalse(dummyFuture.isDone()); latch.countDown(); assertEquals("bla", blockingFuture.get(10, SECONDS)); assertEquals("bla", dummyFuture.get(10, SECONDS)); }