--- jsr166/src/test/tck/ForkJoinPool8Test.java 2013/07/22 18:11:57 1.14 +++ jsr166/src/test/tck/ForkJoinPool8Test.java 2016/08/16 23:02:57 1.33 @@ -4,25 +4,24 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -import junit.framework.*; +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.SECONDS; + +import java.util.HashSet; import java.util.concurrent.CancellationException; +import java.util.concurrent.CountedCompleter; import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; -import java.util.concurrent.ForkJoinWorkerThread; import java.util.concurrent.RecursiveAction; -import java.util.concurrent.CountedCompleter; -import java.util.concurrent.ThreadLocalRandom; -import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import static java.util.concurrent.TimeUnit.SECONDS; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import java.util.Arrays; -import java.util.HashSet; + +import junit.framework.Test; +import junit.framework.TestSuite; public class ForkJoinPool8Test extends JSR166TestCase { public static void main(String[] args) { - junit.textui.TestRunner.run(suite()); + main(suite(), args); } public static Test suite() { @@ -270,12 +269,12 @@ public class ForkJoinPool8Test extends J RecursiveAction a = new CheckedRecursiveAction() { protected void realCompute() { FibAction f = new FibAction(8); - final Thread myself = Thread.currentThread(); + final Thread currentThread = Thread.currentThread(); // test join() assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); assertNull(f.join()); Thread.interrupted(); assertEquals(21, f.result); @@ -284,8 +283,8 @@ public class ForkJoinPool8Test extends J f = new FibAction(8); f.cancel(true); assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); try { f.join(); shouldThrow(); @@ -297,8 +296,8 @@ public class ForkJoinPool8Test extends J f = new FibAction(8); f.completeExceptionally(new FJException()); assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); try { f.join(); shouldThrow(); @@ -310,8 +309,8 @@ public class ForkJoinPool8Test extends J // test quietlyJoin() f = new FibAction(8); assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); f.quietlyJoin(); Thread.interrupted(); assertEquals(21, f.result); @@ -320,8 +319,8 @@ public class ForkJoinPool8Test extends J f = new FibAction(8); f.cancel(true); assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); f.quietlyJoin(); Thread.interrupted(); checkCancelled(f); @@ -329,8 +328,8 @@ public class ForkJoinPool8Test extends J f = new FibAction(8); f.completeExceptionally(new FJException()); assertSame(f, f.fork()); - myself.interrupt(); - assertTrue(myself.isInterrupted()); + currentThread.interrupt(); + assertTrue(currentThread.isInterrupted()); f.quietlyJoin(); Thread.interrupted(); checkCompletedAbnormally(f, f.getException()); @@ -479,7 +478,7 @@ public class ForkJoinPool8Test extends J FailingFibAction f = new FailingFibAction(8); assertSame(f, f.fork()); try { - f.get(5L, TimeUnit.SECONDS); + f.get(5L, SECONDS); shouldThrow(); } catch (ExecutionException success) { Throwable cause = success.getCause(); @@ -1485,42 +1484,36 @@ public class ForkJoinPool8Test extends J } /** - * awaitQuiescent by a worker is equivalent in effect to + * awaitQuiescence by a worker is equivalent in effect to * ForkJoinTask.helpQuiesce() */ - public void testAwaitQuiescent1() throws Exception { + public void testAwaitQuiescence1() throws Exception { final ForkJoinPool p = new ForkJoinPool(); - try { + try (PoolCleaner cleaner = cleaner(p)) { final long startTime = System.nanoTime(); assertTrue(p.isQuiescent()); ForkJoinTask a = new CheckedRecursiveAction() { - protected void realCompute() { - FibAction f = new FibAction(8); - assertSame(f, f.fork()); - boolean t = ForkJoinTask.getPool().awaitQuiescence(MEDIUM_DELAY_MS, TimeUnit.SECONDS); - assertTrue(t); - while (!f.isDone()) { - if (millisElapsedSince(startTime) > LONG_DELAY_MS) - threadFail("timed out"); - assertFalse(p.getAsyncMode()); - assertFalse(p.isShutdown()); - assertFalse(p.isTerminating()); - assertFalse(p.isTerminated()); - Thread.yield(); - } - assertFalse(p.isQuiescent()); - assertEquals(0, ForkJoinTask.getQueuedTaskCount()); - try { - assertEquals(21, f.result); - } catch (Throwable fail) { - threadFail(fail.getMessage()); - } + protected void realCompute() { + FibAction f = new FibAction(8); + assertSame(f, f.fork()); + assertSame(p, ForkJoinTask.getPool()); + boolean quiescent = p.awaitQuiescence(LONG_DELAY_MS, MILLISECONDS); + assertTrue(quiescent); + assertFalse(p.isQuiescent()); + while (!f.isDone()) { + assertFalse(p.getAsyncMode()); + assertFalse(p.isShutdown()); + assertFalse(p.isTerminating()); + assertFalse(p.isTerminated()); + Thread.yield(); } - }; + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); + assertFalse(p.isQuiescent()); + assertEquals(0, ForkJoinTask.getQueuedTaskCount()); + assertEquals(21, f.result); + }}; p.execute(a); while (!a.isDone() || !p.isQuiescent()) { - if (millisElapsedSince(startTime) > LONG_DELAY_MS) - throw new AssertionFailedError("timed out"); assertFalse(p.getAsyncMode()); assertFalse(p.isShutdown()); assertFalse(p.isTerminating()); @@ -1529,70 +1522,66 @@ public class ForkJoinPool8Test extends J } assertEquals(0, p.getQueuedTaskCount()); assertFalse(p.getAsyncMode()); - assertEquals(0, p.getActiveThreadCount()); - assertEquals(0, p.getQueuedTaskCount()); assertEquals(0, p.getQueuedSubmissionCount()); assertFalse(p.hasQueuedSubmissions()); + while (p.getActiveThreadCount() != 0 + && millisElapsedSince(startTime) < LONG_DELAY_MS) + Thread.yield(); assertFalse(p.isShutdown()); assertFalse(p.isTerminating()); assertFalse(p.isTerminated()); - } finally { - joinPool(p); + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); } } /** - * awaitQuiescent returns when pool isQuiescent() or the indicated - * timeout elapse + * awaitQuiescence returns when pool isQuiescent() or the indicated + * timeout elapsed */ - public void testAwaitQuiescent2() throws Exception { + public void testAwaitQuiescence2() throws Exception { + /** + * """It is possible to disable or limit the use of threads in the + * common pool by setting the parallelism property to zero. However + * doing so may cause unjoined tasks to never be executed.""" + */ + if ("0".equals(System.getProperty( + "java.util.concurrent.ForkJoinPool.common.parallelism"))) + return; final ForkJoinPool p = new ForkJoinPool(); - try { - final long startTime = System.nanoTime(); + try (PoolCleaner cleaner = cleaner(p)) { assertTrue(p.isQuiescent()); + final long startTime = System.nanoTime(); ForkJoinTask a = new CheckedRecursiveAction() { - protected void realCompute() { - FibAction f = new FibAction(8); - assertSame(f, f.fork()); - ForkJoinTask.helpQuiesce(); - while (!f.isDone()) { - if (millisElapsedSince(startTime) > LONG_DELAY_MS) - threadFail("timed out"); - assertFalse(p.getAsyncMode()); - assertFalse(p.isShutdown()); - assertFalse(p.isTerminating()); - assertFalse(p.isTerminated()); - Thread.yield(); - } - assertEquals(0, ForkJoinTask.getQueuedTaskCount()); - try { - assertEquals(21, f.result); - } catch (Throwable fail) { System.out.println("fail " + fail.getMessage()); } + protected void realCompute() { + FibAction f = new FibAction(8); + assertSame(f, f.fork()); + while (!f.isDone() + && millisElapsedSince(startTime) < LONG_DELAY_MS) { + assertFalse(p.getAsyncMode()); + assertFalse(p.isShutdown()); + assertFalse(p.isTerminating()); + assertFalse(p.isTerminated()); + Thread.yield(); } - }; + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); + assertEquals(0, ForkJoinTask.getQueuedTaskCount()); + assertEquals(21, f.result); + }}; p.execute(a); - while (!p.awaitQuiescence(LONG_DELAY_MS, MILLISECONDS)) { - if (millisElapsedSince(startTime) > LONG_DELAY_MS) - threadFail("timed out"); - assertFalse(p.getAsyncMode()); - assertFalse(p.isShutdown()); - assertFalse(p.isTerminating()); - assertFalse(p.isTerminated()); - Thread.yield(); - } + assertTrue(p.awaitQuiescence(LONG_DELAY_MS, MILLISECONDS)); assertTrue(p.isQuiescent()); assertTrue(a.isDone()); assertEquals(0, p.getQueuedTaskCount()); assertFalse(p.getAsyncMode()); - assertEquals(0, p.getActiveThreadCount()); - assertEquals(0, p.getQueuedTaskCount()); assertEquals(0, p.getQueuedSubmissionCount()); assertFalse(p.hasQueuedSubmissions()); + while (p.getActiveThreadCount() != 0 + && millisElapsedSince(startTime) < LONG_DELAY_MS) + Thread.yield(); assertFalse(p.isShutdown()); assertFalse(p.isTerminating()); assertFalse(p.isTerminated()); - } finally { - joinPool(p); + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); } }