jdk/test/java/util/concurrent/FutureTask/CancelledFutureLoops.java
changeset 34347 4a17f9e90a0f
parent 22293 9a913cb32aae
child 36233 f85ed703cf7e
--- a/jdk/test/java/util/concurrent/FutureTask/CancelledFutureLoops.java	Wed Nov 25 18:51:06 2015 -0800
+++ b/jdk/test/java/util/concurrent/FutureTask/CancelledFutureLoops.java	Wed Nov 25 18:56:44 2015 -0800
@@ -40,13 +40,21 @@
  * TIMEOUT msecs to complete.
  */
 
-import java.util.concurrent.*;
-import java.util.concurrent.locks.*;
-import java.util.*;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import java.util.SplittableRandom;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.locks.ReentrantLock;
 
 public final class CancelledFutureLoops {
     static final ExecutorService pool = Executors.newCachedThreadPool();
-    static final LoopHelpers.SimpleRandom rng = new LoopHelpers.SimpleRandom();
+    static final SplittableRandom rnd = new SplittableRandom();
     static boolean print = false;
     static final int ITERS = 1000000;
     static final long TIMEOUT = 100;
@@ -61,7 +69,7 @@
         for (int i = 2; i <= maxThreads; i += (i+1) >>> 1) {
             System.out.print("Threads: " + i);
             try {
-                new FutureLoop(i).test();
+                new FutureLoop(i, rnd.split()).test();
             }
             catch (BrokenBarrierException bb) {
                 // OK; ignore
@@ -72,19 +80,22 @@
             Thread.sleep(TIMEOUT);
         }
         pool.shutdown();
-        if (! pool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS))
+        if (! pool.awaitTermination(60L, SECONDS))
             throw new Error();
     }
 
     static final class FutureLoop implements Callable {
-        private int v = rng.next();
+        private final int nthreads;
+        private final SplittableRandom rnd;
         private final ReentrantLock lock = new ReentrantLock();
         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
         private final CyclicBarrier barrier;
-        private final int nthreads;
-        FutureLoop(int nthreads) {
+        private int v;
+        FutureLoop(int nthreads, SplittableRandom rnd) {
             this.nthreads = nthreads;
+            this.rnd = rnd;
             barrier = new CyclicBarrier(nthreads+1, timer);
+            v = rnd.nextInt();
         }
 
         final void test() throws Exception {
@@ -100,7 +111,7 @@
                     tooLate = true;
                 // Unbunch some of the cancels
                 if ( (i & 3) == 0)
-                    Thread.sleep(1 + rng.next() % 10);
+                    Thread.sleep(1 + rnd.nextInt(5));
             }
 
             Object f0 = futures[0].get();