< prev index next >

test/jdk/java/util/concurrent/ExecutorService/Invoke.java

Print this page
8234131: Miscellaneous changes imported from jsr166 CVS 2021-01
Reviewed-by: martin

*** 82,107 **** } } public static void main(String[] args) { try { ! testInvokeAll(); ! testInvokeAny(); ! testInvokeAny_cancellationInterrupt(); } catch (Throwable t) { unexpected(t); } if (failed > 0) throw new Error( String.format("Passed = %d, failed = %d", passed, failed)); } static final long timeoutSeconds = 10L; ! static void testInvokeAll() throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); - final int nThreads = rnd.nextInt(2, 7); - final boolean timed = rnd.nextBoolean(); final ExecutorService pool = Executors.newFixedThreadPool(nThreads); final AtomicLong count = new AtomicLong(0); class Task implements Callable<Long> { public Long call() throws Exception { return count.incrementAndGet(); --- 82,112 ---- } } public static void main(String[] args) { try { ! for (int nThreads = 1; nThreads <= 6; ++nThreads) { ! // untimed ! testInvokeAll(nThreads, false); ! testInvokeAny(nThreads, false); ! testInvokeAny_cancellationInterrupt(nThreads, false); ! // timed ! testInvokeAll(nThreads, true); ! testInvokeAny(nThreads, true); ! testInvokeAny_cancellationInterrupt(nThreads, true); ! } } catch (Throwable t) { unexpected(t); } if (failed > 0) throw new Error( String.format("Passed = %d, failed = %d", passed, failed)); } static final long timeoutSeconds = 10L; ! static void testInvokeAll(int nThreads, boolean timed) throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); final ExecutorService pool = Executors.newFixedThreadPool(nThreads); final AtomicLong count = new AtomicLong(0); class Task implements Callable<Long> { public Long call() throws Exception { return count.incrementAndGet();
*** 134,154 **** } finally { pool.shutdownNow(); } } ! static void testInvokeAny() throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); ! final boolean timed = rnd.nextBoolean(); ! final ExecutorService pool = Executors.newSingleThreadExecutor(); final AtomicLong count = new AtomicLong(0); final CountDownLatch invokeAnyDone = new CountDownLatch(1); class Task implements Callable<Long> { public Long call() throws Exception { long x = count.incrementAndGet(); ! check(x <= 2); ! if (x == 2) { // wait for main thread to interrupt us ... awaitInterrupt(timeoutSeconds); // ... and then for invokeAny to return check(invokeAnyDone.await(timeoutSeconds, SECONDS)); } --- 139,157 ---- } finally { pool.shutdownNow(); } } ! static void testInvokeAny(int nThreads, boolean timed) throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); ! final ExecutorService pool = Executors.newFixedThreadPool(nThreads); final AtomicLong count = new AtomicLong(0); final CountDownLatch invokeAnyDone = new CountDownLatch(1); class Task implements Callable<Long> { public Long call() throws Exception { long x = count.incrementAndGet(); ! if (x > 1) { // wait for main thread to interrupt us ... awaitInterrupt(timeoutSeconds); // ... and then for invokeAny to return check(invokeAnyDone.await(timeoutSeconds, SECONDS)); }
*** 171,206 **** else val = pool.invokeAny(tasks); check(val == 1); invokeAnyDone.countDown(); - // inherent race between main thread interrupt and - // start of second task - check(count.get() == 1 || count.get() == 2); - pool.shutdown(); check(pool.awaitTermination(timeoutSeconds, SECONDS)); } finally { pool.shutdownNow(); } } /** * Every remaining running task is sent an interrupt for cancellation. */ ! static void testInvokeAny_cancellationInterrupt() throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); - final int nThreads = rnd.nextInt(2, 7); - final boolean timed = rnd.nextBoolean(); final ExecutorService pool = Executors.newFixedThreadPool(nThreads); final AtomicLong count = new AtomicLong(0); final AtomicLong interruptedCount = new AtomicLong(0); final CyclicBarrier allStarted = new CyclicBarrier(nThreads); class Task implements Callable<Long> { public Long call() throws Exception { - allStarted.await(); long x = count.incrementAndGet(); if (x > 1) // main thread will interrupt us awaitInterrupt(timeoutSeconds); return x; } --- 174,207 ---- else val = pool.invokeAny(tasks); check(val == 1); invokeAnyDone.countDown(); pool.shutdown(); check(pool.awaitTermination(timeoutSeconds, SECONDS)); + + long c = count.get(); + check(c >= 1 && c <= tasks.size()); + } finally { pool.shutdownNow(); } } /** * Every remaining running task is sent an interrupt for cancellation. */ ! static void testInvokeAny_cancellationInterrupt(int nThreads, boolean timed) throws Throwable { final ThreadLocalRandom rnd = ThreadLocalRandom.current(); final ExecutorService pool = Executors.newFixedThreadPool(nThreads); final AtomicLong count = new AtomicLong(0); final AtomicLong interruptedCount = new AtomicLong(0); final CyclicBarrier allStarted = new CyclicBarrier(nThreads); class Task implements Callable<Long> { public Long call() throws Exception { long x = count.incrementAndGet(); + allStarted.await(); if (x > 1) // main thread will interrupt us awaitInterrupt(timeoutSeconds); return x; }
< prev index next >