--- jsr166/src/test/loops/FutileTimedTryLockLoops.java 2014/12/31 17:00:58 1.2 +++ jsr166/src/test/loops/FutileTimedTryLockLoops.java 2016/12/31 22:17:40 1.6 @@ -4,9 +4,12 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.locks.*; +import java.util.Collections; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; /** * Measures repeated futile timed attempts to acquire a ReentrantLock. @@ -51,7 +54,7 @@ public final class FutileTimedTryLockLoo continue nextArg; } } - throw new Error("Usage: FutileTimedTryLockLoops minThreads=n maxThreads=n Threads=n nanos=n iters=n"); + throw new Error("Usage: FutileTimedTryLockLoops minThreads=n maxThreads=n threads=n nanos=n iters=n"); } final ExecutorService pool = Executors.newCachedThreadPool(); final ReentrantLock lock = new ReentrantLock(); @@ -59,6 +62,10 @@ public final class FutileTimedTryLockLoo lock.lock(); for (int i = minThreads; i <= maxThreads; i += (i+1) >>> 1) { + // warmup + if (i == minThreads) + pool.invokeAll(Collections.nCopies(i, task)); + long startTime = System.nanoTime(); pool.invokeAll(Collections.nCopies(i, task)); long elapsed = System.nanoTime() - startTime;