18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/* 28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166 38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at 48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/ 58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes, 68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd. 78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166; 108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport junit.framework.*; 128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.*; 138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport static java.util.concurrent.TimeUnit.MILLISECONDS; 148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport static java.util.concurrent.TimeUnit.NANOSECONDS; 158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.*; 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ThreadPoolExecutorTest extends JSR166TestCase { 188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static class ExtendedTPE extends ThreadPoolExecutor { 208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch beforeCalled = new CountDownLatch(1); 218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch afterCalled = new CountDownLatch(1); 228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch terminatedCalled = new CountDownLatch(1); 238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public ExtendedTPE() { 258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle super(1, 1, LONG_DELAY_MS, MILLISECONDS, new SynchronousQueue<Runnable>()); 268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void beforeExecute(Thread t, Runnable r) { 288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle beforeCalled.countDown(); 298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void afterExecute(Runnable r, Throwable t) { 318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle afterCalled.countDown(); 328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle protected void terminated() { 348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle terminatedCalled.countDown(); 358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public boolean beforeCalled() { 388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return beforeCalled.getCount() == 0; 398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public boolean afterCalled() { 418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return afterCalled.getCount() == 0; 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public boolean terminatedCalled() { 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return terminatedCalled.getCount() == 0; 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static class FailingThreadFactory implements ThreadFactory { 498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int calls = 0; 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Thread newThread(Runnable r) { 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (++calls > 1) return null; 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return new Thread(r); 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute successfully executes a runnable 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testExecute() throws InterruptedException { 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final Runnable task = new CheckedRunnable() { 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(done.await(SMALL_DELAY_MS, MILLISECONDS)); 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getActiveCount increases but doesn't overestimate, when a 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * thread becomes active 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetActiveCount() throws InterruptedException { 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getActiveCount()); 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getActiveCount()); 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getActiveCount()); 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * prestartCoreThread starts a thread if under corePoolSize, else doesn't 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPrestartCoreThread() { 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getPoolSize()); 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.prestartCoreThread()); 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.prestartCoreThread()); 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, p.getPoolSize()); 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.prestartCoreThread()); 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, p.getPoolSize()); 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * prestartAllCoreThreads starts all corePoolSize threads 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPrestartAllCoreThreads() { 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getPoolSize()); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.prestartAllCoreThreads(); 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, p.getPoolSize()); 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.prestartAllCoreThreads(); 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, p.getPoolSize()); 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getCompletedTaskCount increases, but doesn't overestimate, 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * when tasks complete 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetCompletedTaskCount() throws InterruptedException { 1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadProceed = new CountDownLatch(1); 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadDone = new CountDownLatch(1); 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadProceed.await(); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadDone.countDown(); 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(threadStarted); 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadProceed.countDown(); 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadDone.await(); 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (p.getCompletedTaskCount() != 1) { 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (millisElapsedSince(startTime) > LONG_DELAY_MS) 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle fail("timed out"); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.yield(); 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getCorePoolSize returns size given in constructor if not otherwise set 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetCorePoolSize() { 1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getCorePoolSize()); 1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getKeepAliveTime returns value given in constructor if not otherwise set 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetKeepAliveTime() { 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1000, MILLISECONDS, 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getKeepAliveTime(TimeUnit.SECONDS)); 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getThreadFactory returns factory in constructor if not set 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetThreadFactory() { 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadFactory tf = new SimpleThreadFactory(); 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tf, 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(tf, p.getThreadFactory()); 2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setThreadFactory sets the thread factory returned by getThreadFactory 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetThreadFactory() { 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadFactory tf = new SimpleThreadFactory(); 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setThreadFactory(tf); 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(tf, p.getThreadFactory()); 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setThreadFactory(null) throws NPE 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetThreadFactoryNull() { 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setThreadFactory(null); 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getRejectedExecutionHandler returns handler in constructor if not set 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetRejectedExecutionHandler() { 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final RejectedExecutionHandler h = new NoOpREHandler(); 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(h, p.getRejectedExecutionHandler()); 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setRejectedExecutionHandler sets the handler returned by 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getRejectedExecutionHandler 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetRejectedExecutionHandler() { 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new NoOpREHandler(); 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setRejectedExecutionHandler(h); 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(h, p.getRejectedExecutionHandler()); 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setRejectedExecutionHandler(null) throws NPE 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetRejectedExecutionHandlerNull() { 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setRejectedExecutionHandler(null); 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getLargestPoolSize increases, but doesn't overestimate, when 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * multiple threads active 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetLargestPoolSize() throws InterruptedException { 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int THREADS = 3; 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(THREADS, THREADS, 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadsStarted = new CountDownLatch(THREADS); 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getLargestPoolSize()); 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < THREADS; i++) 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadsStarted.countDown(); 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadsStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getMaximumPoolSize returns value given in constructor if not 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * otherwise set 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetMaximumPoolSize() { 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 3, 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, p.getMaximumPoolSize()); 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPoolSize increases, but doesn't overestimate, when threads 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * become active 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPoolSize() throws InterruptedException { 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getPoolSize()); 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getTaskCount increases, but doesn't overestimate, when tasks submitted 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetTaskCount() throws InterruptedException { 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getTaskCount()); 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getTaskCount()); 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getTaskCount()); 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isShutdown is false before shutdown, true after 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsShutdown() { 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isShutdown()); 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * awaitTermination on a non-shutdown pool times out 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAwaitTermination_timesOut() throws InterruptedException { 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(Long.MIN_VALUE, NANOSECONDS)); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(Long.MIN_VALUE, MILLISECONDS)); 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(-1L, NANOSECONDS)); 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(-1L, MILLISECONDS)); 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(0L, NANOSECONDS)); 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(0L, MILLISECONDS)); 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long timeoutNanos = 999999L; 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(timeoutNanos, NANOSECONDS)); 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(System.nanoTime() - startTime >= timeoutNanos); 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle startTime = System.nanoTime(); 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long timeoutMillis = timeoutMillis(); 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.awaitTermination(timeoutMillis, MILLISECONDS)); 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis); 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.shutdown(); 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isTerminated is false before termination, true after 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsTerminated() throws InterruptedException { 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isTerminating is not true when running or when terminated 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsTerminating() throws InterruptedException { 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getQueue returns the work queue, which contains queued tasks 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetQueue() throws InterruptedException { 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(10); 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q); 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FutureTask[] tasks = new FutureTask[5]; 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) { 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Callable task = new CheckedCallable<Boolean>() { 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Boolean realCall() throws InterruptedException { 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(q, p.getQueue()); 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return Boolean.TRUE; 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = new FutureTask(task); 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(tasks[i]); 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(q, p.getQueue()); 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(tasks[0])); 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(tasks[tasks.length - 1])); 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 1, q.size()); 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove(task) removes queued task, and fails to remove active task 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemove() throws InterruptedException { 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(10); 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q); 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable[] tasks = new Runnable[5]; 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) { 5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = new CheckedRunnable() { 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(tasks[i]); 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.remove(tasks[0])); 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(tasks[4])); 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(tasks[3])); 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.remove(tasks[4])); 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.remove(tasks[4])); 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(tasks[4])); 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(tasks[3])); 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.remove(tasks[3])); 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(tasks[3])); 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * purge removes cancelled tasks from the queue 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPurge() throws InterruptedException { 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final BlockingQueue<Runnable> q = new ArrayBlockingQueue<Runnable>(10); 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q); 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle FutureTask[] tasks = new FutureTask[5]; 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) { 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Callable task = new CheckedCallable<Boolean>() { 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Boolean realCall() throws InterruptedException { 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return Boolean.TRUE; 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = new FutureTask(task); 5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(tasks[i]); 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length, p.getTaskCount()); 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 1, q.size()); 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1L, p.getActiveCount()); 5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0L, p.getCompletedTaskCount()); 5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[4].cancel(true); 5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[3].cancel(false); 5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.purge(); 5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 3, q.size()); 5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 2, p.getTaskCount()); 5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.purge(); // Nothing to do 5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 3, q.size()); 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length - 2, p.getTaskCount()); 5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * shutdownNow returns a list containing tasks that were not run 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdownNow() { 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List l; 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 5; i++) 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new MediumPossiblyInterruptedRunnable()); 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle finally { 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l = p.shutdownNow(); 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { return; } 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(l.size() <= 4); 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Exception Tests 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize argument is less than zero 6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor1() { 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(-1, 1, 6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is less than zero 6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor2() { 6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, -1, 6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is equal to zero 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor3() { 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 0, 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if keepAliveTime is less than zero 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor4() { 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle -1L, MILLISECONDS, 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize is greater than the maximumPoolSize 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor5() { 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 1, 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if workQueue is set to null 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException() { 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (BlockingQueue) null); 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize argument is less than zero 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor6() { 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(-1, 1, 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is less than zero 7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor7() { 7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, -1, 7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is equal to zero 7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor8() { 7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 0, 7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if keepAliveTime is less than zero 7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor9() { 7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle -1L, MILLISECONDS, 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize is greater than the maximumPoolSize 7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor10() { 7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 1, 7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if workQueue is set to null 7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException2() { 7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (BlockingQueue) null, 7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory()); 7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if threadFactory is set to null 7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException3() { 7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (ThreadFactory) null); 7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize argument is less than zero 7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor11() { 7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(-1, 1, 7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is less than zero 8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor12() { 8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, -1, 8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is equal to zero 8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor13() { 8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 0, 8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if keepAliveTime is less than zero 8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor14() { 8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle -1L, MILLISECONDS, 8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize is greater than the maximumPoolSize 8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor15() { 8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 1, 8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if workQueue is set to null 8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException4() { 8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (BlockingQueue) null, 8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if handler is set to null 8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException5() { 8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (RejectedExecutionHandler) null); 8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize argument is less than zero 8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor16() { 8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(-1, 1, 8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is less than zero 8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor17() { 8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, -1, 8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if maximumPoolSize is equal to zero 9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor18() { 9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 0, 9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if keepAliveTime is less than zero 9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor19() { 9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle -1L, MILLISECONDS, 9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if corePoolSize is greater than the maximumPoolSize 9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor20() { 9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 1, 9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if workQueue is null 9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException6() { 9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (BlockingQueue) null, 9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if handler is null 9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException7() { 9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new SimpleThreadFactory(), 9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (RejectedExecutionHandler) null); 9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws if ThreadFactory is null 9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructorNullPointerException8() { 9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10), 9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (ThreadFactory) null, 9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new NoOpREHandler()); 9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of submitted callable throws InterruptedException if interrupted 9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInterruptedSubmit() throws InterruptedException { 9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 60, TimeUnit.SECONDS, 9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedInterruptedRunnable() { 10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws Exception { 10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Callable task = new CheckedCallable<Boolean>() { 10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Boolean realCall() throws InterruptedException { 10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return Boolean.TRUE; 10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.submit(task).get(); 10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t, MEDIUM_DELAY_MS); 10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute throws RejectedExecutionException if saturated. 10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedExecute() { 10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1)); 10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 10328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 10348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 10358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 10368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) 10388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 10398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) { 10408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 10428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) {} 10448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getTaskCount() <= 2); 10458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 10488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 10498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * submit(runnable) throws RejectedExecutionException if saturated. 10548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedSubmitRunnable() { 10568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 10578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 10588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 10598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1)); 10608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 10618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 10638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 10648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 10658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) 10678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.submit(task); 10688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) { 10698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 10718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) {} 10738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getTaskCount() <= 2); 10748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 10778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 10788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * submit(callable) throws RejectedExecutionException if saturated. 10838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedSubmitCallable() { 10858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 10868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 10878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 10888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1)); 10898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 10908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 10928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 10938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 10948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 10958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) 10968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.submit(Executors.callable(task)); 10978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) { 10988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 11008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) {} 11028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getTaskCount() <= 2); 11038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 11068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 11078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executor using CallerRunsPolicy runs task if saturated. 11128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedExecute2() { 11148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy(); 11158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 11168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 11178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, 11188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MILLISECONDS, 11198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), 11208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 11218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; 11238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; ++i) 11248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = new TrackedNoOpRunnable(); 11258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedLongRunnable mr = new TrackedLongRunnable(); 11268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(mr); 11278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; ++i) 11288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(tasks[i]); 11298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 1; i < tasks.length; ++i) 11308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(tasks[i].done); 11318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdownNow(); } catch (SecurityException ok) { return; } 11328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 11348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executor using DiscardPolicy drops task if saturated. 11398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedExecute3() { 11418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy(); 11428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 11438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 11448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 11458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), 11468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 11478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable[] tasks = new TrackedNoOpRunnable[5]; 11498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; ++i) 11508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = new TrackedNoOpRunnable(); 11518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new TrackedLongRunnable()); 11528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (TrackedNoOpRunnable task : tasks) 11538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 11548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (TrackedNoOpRunnable task : tasks) 11558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.done); 11568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdownNow(); } catch (SecurityException ok) { return; } 11578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 11598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * executor using DiscardOldestPolicy drops oldest task if saturated. 11648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSaturatedExecute4() { 11668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy(); 11678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 11688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 11698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 11708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), 11718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 11728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new TrackedLongRunnable()); 11748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedLongRunnable r2 = new TrackedLongRunnable(); 11758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(r2); 11768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getQueue().contains(r2)); 11778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable r3 = new TrackedNoOpRunnable(); 11788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(r3); 11798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getQueue().contains(r2)); 11808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getQueue().contains(r3)); 11818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdownNow(); } catch (SecurityException ok) { return; } 11828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 11848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute throws RejectedExecutionException if shutdown 11898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRejectedExecutionExceptionOnShutdown() { 11918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 11928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 11938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 11948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1)); 11958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 11968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new NoOpRunnable()); 11988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) {} 12008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute using CallerRunsPolicy drops task on shutdown 12068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCallerRunsOnShutdown() { 12088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.CallerRunsPolicy(); 12098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 12108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 12118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 12128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), h); 12138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 12158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 12168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable r = new TrackedNoOpRunnable(); 12178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(r); 12188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(r.done); 12198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 12208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute using DiscardPolicy drops task on shutdown 12268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDiscardOnShutdown() { 12288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardPolicy(); 12298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 12308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 12318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 12328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), 12338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 12348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 12368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 12378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable r = new TrackedNoOpRunnable(); 12388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(r); 12398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(r.done); 12408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 12418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute using DiscardOldestPolicy drops task on shutdown 12478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDiscardOldestOnShutdown() { 12498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle RejectedExecutionHandler h = new ThreadPoolExecutor.DiscardOldestPolicy(); 12508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 12518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 1, 12528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 12538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(1), 12548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle h); 12558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 12578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 12588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedNoOpRunnable r = new TrackedNoOpRunnable(); 12598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(r); 12608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(r.done); 12618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 12628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute(null) throws NPE 12688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testExecuteNull() { 12708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 12718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 12728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 12738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 12748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 12758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(null); 12768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 12778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 12788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 12838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setCorePoolSize of negative value throws IllegalArgumentException 12848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 12858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCorePoolSizeIllegalArgumentException() { 12868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 12878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 2, 12888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 12898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 12908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 12918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setCorePoolSize(-1); 12928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 12938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 12948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 12958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 12968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 12988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setMaximumPoolSize(int) throws IllegalArgumentException if 13028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * given a value less the core pool size 13038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testMaximumPoolSizeIllegalArgumentException() { 13058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 13068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 3, 13078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 13088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 13098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 13108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setMaximumPoolSize(1); 13118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 13128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 13138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 13148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 13158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 13178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setMaximumPoolSize throws IllegalArgumentException 13218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * if given a negative value 13228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testMaximumPoolSizeIllegalArgumentException2() { 13248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 13258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 3, 13268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 13278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 13288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 13298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setMaximumPoolSize(-1); 13308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 13318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 13328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 13338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 13348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 13368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setKeepAliveTime throws IllegalArgumentException 13408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * when given a negative value 13418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testKeepAliveTimeIllegalArgumentException() { 13438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = 13448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 3, 13458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 13468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 13478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 13488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setKeepAliveTime(-1,MILLISECONDS); 13498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 13508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 13518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 13528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 13538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 13558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * terminated() is called on termination 13598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTerminated() { 13618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExtendedTPE p = new ExtendedTPE(); 13628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 13638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.terminatedCalled()); 13648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 13658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * beforeExecute and afterExecute are called when executing task 13698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testBeforeAfter() throws InterruptedException { 13718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExtendedTPE p = new ExtendedTPE(); 13728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 13738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 13748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CheckedRunnable task = new CheckedRunnable() { 13758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 13768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 13778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 13788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 13798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(p.afterCalled); 13808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, done.getCount()); 13818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.afterCalled()); 13828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.beforeCalled()); 13838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 13848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 13858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 13868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 13888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 13898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 13908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of callable returns result 13918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 13928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitCallable() throws Exception { 13938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 13948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 13958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 13968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 13978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 13988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<String> future = e.submit(new StringTask()); 13998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = future.get(); 14008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 14018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of runnable returns successfully 14088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitRunnable() throws Exception { 14108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 14118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 14128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 14138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 14148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<?> future = e.submit(new NoOpRunnable()); 14168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle future.get(); 14178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(future.isDone()); 14188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of (runnable, result) returns result 14258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitRunnable2() throws Exception { 14278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 14288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 14298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 14308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 14318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING); 14338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = future.get(); 14348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 14358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(null) throws NPE 14428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny1() throws Exception { 14448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 14458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 14468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 14478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 14488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(null); 14508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 14518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 14528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(empty collection) throws IAE 14598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny2() throws Exception { 14618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 14628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 14638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 14648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 14658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(new ArrayList<Callable<String>>()); 14678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 14688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 14698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) throws NPE if c has null elements 14768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny3() throws Exception { 14788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch latch = new CountDownLatch(1); 14798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ExecutorService e = 14808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 14818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 14828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 14838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 14848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(latchAwaitingStringTask(latch)); 14858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 14868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 14878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l); 14888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 14898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 14908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 14918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle latch.countDown(); 14928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 14938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 14958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 14968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 14978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) throws ExecutionException if no task completes 14988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 14998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny4() throws Exception { 15008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 15058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 15068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l); 15088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 15108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 15118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 15128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 15138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) returns result of some task 15188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny5() throws Exception { 15208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 15268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 15278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 15288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = e.invokeAny(l); 15298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 15308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 15318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 15328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(null) throws NPE 15378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll1() throws Exception { 15398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(null); 15458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 15478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 15488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 15498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(empty collection) returns empty collection 15548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll2() throws InterruptedException { 15568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>()); 15628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(r.isEmpty()); 15638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 15648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 15658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(c) throws NPE if c has null elements 15708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll3() throws Exception { 15728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 15778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 15788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 15798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l); 15818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 15828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 15838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 15848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 15858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 15878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 15888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 15898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of element of invokeAll(c) throws exception on failed task 15908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 15918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll4() throws Exception { 15928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 15938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 15948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 15958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 15968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 15978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 15988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 15998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = e.invokeAll(l); 16008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, futures.size()); 16018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle futures.get(0).get(); 16038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 16058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 16068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 16088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 16098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(c) returns results of all completed tasks 16148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll5() throws Exception { 16168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 16178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 16188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 16198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 16208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 16228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 16238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 16248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = e.invokeAll(l); 16258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, futures.size()); 16268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future<String> future : futures) 16278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, future.get()); 16288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 16298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 16308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(null) throws NPE 16358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny1() throws Exception { 16378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 16388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 16398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 16408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 16418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS); 16438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 16458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 16468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 16478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(,,null) throws NPE 16528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAnyNullTimeUnit() throws Exception { 16548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 16558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 16568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 16578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 16588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 16598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 16608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, null); 16628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 16648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 16658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 16668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(empty collection) throws IAE 16718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny2() throws Exception { 16738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 16748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 16758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 16768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 16778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS); 16798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 16808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 16818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 16828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 16838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 16858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 16868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 16878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) throws NPE if c has null elements 16888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 16898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny3() throws Exception { 16908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch latch = new CountDownLatch(1); 16918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ExecutorService e = 16928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 16938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 16948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 16958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 16968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(latchAwaitingStringTask(latch)); 16978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 16988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 16998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 17008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 17028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle latch.countDown(); 17048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) throws ExecutionException if no task completes 17108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny4() throws Exception { 17128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 17138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 17148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 17158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 17168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 17178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 17188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 17208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 17228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 17238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) returns result of some task 17308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny5() throws Exception { 17328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 17338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 17348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 17358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 17368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 17388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 17398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 17408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 17418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 17428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(null) throws NPE 17498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll1() throws Exception { 17518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 17528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 17538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 17548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 17558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS); 17578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 17598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(,,null) throws NPE 17668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAllNullTimeUnit() throws Exception { 17688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 17698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 17708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 17718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 17728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 17738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 17748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, null); 17768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 17778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 17788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 17848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(empty collection) returns empty collection 17858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 17868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll2() throws InterruptedException { 17878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 17888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 17898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 17908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 17918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 17928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS); 17938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(r.isEmpty()); 17948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 17958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 17968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 17988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 17998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) throws NPE if c has null elements 18018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll3() throws Exception { 18038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 18048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 18058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 18068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 18078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 18088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 18098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 18108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 18128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 18138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 18148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 18158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 18168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of element of invokeAll(c) throws exception on failed task 18218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll4() throws Exception { 18238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 18248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 18258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 18268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 18278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 18288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 18298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 18308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 18318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, futures.size()); 18328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle futures.get(0).get(); 18348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 18358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 18368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 18378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 18388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 18398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) returns results of all completed tasks 18448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll5() throws Exception { 18468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 18478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 18488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 18498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 18508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 18528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 18538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 18548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 18558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 18568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, futures.size()); 18578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future<String> future : futures) 18588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, future.get()); 18598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 18608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 18618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) cancels tasks not completed by timeout 18668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll6() throws Exception { 18688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = 18698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 18708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 18718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 18728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 18738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 18748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 18758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); 18768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 18778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 18788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, SHORT_DELAY_MS, MILLISECONDS); 18798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.size(), futures.size()); 18808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future future : futures) 18818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(future.isDone()); 18828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(futures.get(0).isCancelled()); 18838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(futures.get(1).isCancelled()); 18848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 18858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 18868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 18888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 18898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 18908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Execution continues if there is at least one thread even if 18918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * thread factory fails to create more 18928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 18938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testFailingThreadFactory() throws InterruptedException { 18948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ExecutorService e = 18958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(100, 100, 18968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS, 18978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new LinkedBlockingQueue<Runnable>(), 18988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new FailingThreadFactory()); 18998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 19008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int TASKS = 100; 19018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(TASKS); 19028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int k = 0; k < TASKS; ++k) 19038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.execute(new CheckedRunnable() { 19048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 19058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 19068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 19078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(done.await(LONG_DELAY_MS, MILLISECONDS)); 19088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 19098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 19108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 19138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 19148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * allowsCoreThreadTimeOut is by default false. 19158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 19168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAllowsCoreThreadTimeOut() { 19178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 19188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 2, 19198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1000, MILLISECONDS, 19208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 19218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.allowsCoreThreadTimeOut()); 19228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 19238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 19258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 19268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * allowCoreThreadTimeOut(true) causes idle threads to time out 19278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 19288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAllowCoreThreadTimeOut_true() throws Exception { 19298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long coreThreadTimeOut = SHORT_DELAY_MS; 19308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 19318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 10, 19328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle coreThreadTimeOut, MILLISECONDS, 19338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 19348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 19358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 19368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.allowCoreThreadTimeOut(true); 19378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 19388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 19398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 19408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 19418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 19428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(threadStarted); 19438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle delay(coreThreadTimeOut); 19448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 19458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (p.getPoolSize() > 0 19468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle && millisElapsedSince(startTime) < LONG_DELAY_MS) 19478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.yield(); 19488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); 19498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getPoolSize()); 19508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 19518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 19528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 19558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 19568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * allowCoreThreadTimeOut(false) causes idle threads not to time out 19578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 19588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAllowCoreThreadTimeOut_false() throws Exception { 19598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long coreThreadTimeOut = SHORT_DELAY_MS; 19608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 19618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(2, 10, 19628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle coreThreadTimeOut, MILLISECONDS, 19638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue<Runnable>(10)); 19648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 19658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 19668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.allowCoreThreadTimeOut(false); 19678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 19688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 19698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 19708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getPoolSize() >= 1); 19718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 19728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle delay(2 * coreThreadTimeOut); 19738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getPoolSize() >= 1); 19748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 19758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 19768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 19788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 19798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 19808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute allows the same task to be submitted multiple times, even 19818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * if rejected 19828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 19838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRejectedRecycledTask() throws InterruptedException { 19848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int nTasks = 1000; 19858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(nTasks); 19868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final Runnable recycledTask = new Runnable() { 19878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void run() { 19888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 19898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 19908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = 19918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ThreadPoolExecutor(1, 30, 60, TimeUnit.SECONDS, 19928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue(30)); 19938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 19948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < nTasks; ++i) { 19958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (;;) { 19968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 19978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(recycledTask); 19988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle break; 19998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 20008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle catch (RejectedExecutionException ignore) {} 20018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 20028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 20038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // enough time to run all tasks 20048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(done.await(nTasks * SHORT_DELAY_MS, MILLISECONDS)); 20058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 20068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 20078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 20088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 20098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 20108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 2011