< prev index next >

test/jdk/java/util/concurrent/tck/ThreadLocalRandomTest.java

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

@@ -382,31 +382,28 @@
         // be polluted by previous tests.
         final AtomicReference<ThreadLocalRandom> threadLocalRandom =
             new AtomicReference<>();
         final AtomicLong rand = new AtomicLong();
 
-        long firstRand = 0;
-        ThreadLocalRandom firstThreadLocalRandom = null;
-
         Runnable getRandomState = new CheckedRunnable() {
             public void realRun() {
                 ThreadLocalRandom current = ThreadLocalRandom.current();
                 assertSame(current, ThreadLocalRandom.current());
-                // test bug: the following is not guaranteed and not true in JDK8
-                //                assertNotSame(current, threadLocalRandom.get());
                 rand.set(current.nextLong());
                 threadLocalRandom.set(current);
             }};
 
-        Thread first = newStartedThread(getRandomState);
-        awaitTermination(first);
-        firstRand = rand.get();
-        firstThreadLocalRandom = threadLocalRandom.get();
+        awaitTermination(newStartedThread(getRandomState));
+        long firstRand = rand.get();
+        ThreadLocalRandom firstThreadLocalRandom = threadLocalRandom.get();
+        assertNotNull(firstThreadLocalRandom);
 
         for (int i = 0; i < NCALLS; i++) {
-            Thread t = newStartedThread(getRandomState);
-            awaitTermination(t);
+            awaitTermination(newStartedThread(getRandomState));
+            if (testImplementationDetails)
+                // ThreadLocalRandom has been a singleton since jdk8.
+                assertSame(firstThreadLocalRandom, threadLocalRandom.get());
             if (firstRand != rand.get())
                 return;
         }
         fail("all threads generate the same pseudo-random sequence");
     }
< prev index next >