jdk/test/java/util/concurrent/locks/ReentrantLock/CancelledLockLoops.java
changeset 43522 f9c6f543c4db
parent 34343 d4f53925ed36
equal deleted inserted replaced
43521:60e247b8d9a4 43522:f9c6f543c4db
    38  * Checks for responsiveness of locks to interrupts.
    38  * Checks for responsiveness of locks to interrupts.
    39  */
    39  */
    40 
    40 
    41 import static java.util.concurrent.TimeUnit.NANOSECONDS;
    41 import static java.util.concurrent.TimeUnit.NANOSECONDS;
    42 
    42 
    43 import java.util.SplittableRandom;
       
    44 import java.util.concurrent.CyclicBarrier;
    43 import java.util.concurrent.CyclicBarrier;
       
    44 import java.util.concurrent.ThreadLocalRandom;
    45 import java.util.concurrent.locks.ReentrantLock;
    45 import java.util.concurrent.locks.ReentrantLock;
    46 
    46 
    47 public final class CancelledLockLoops {
    47 public final class CancelledLockLoops {
    48     static final SplittableRandom rnd = new SplittableRandom();
       
    49 
       
    50     public static void main(String[] args) throws Exception {
    48     public static void main(String[] args) throws Exception {
    51         final int maxThreads = (args.length > 0) ? Integer.parseInt(args[0]) : 5;
    49         final int maxThreads = (args.length > 0) ? Integer.parseInt(args[0]) : 5;
    52         final int reps = 1;     // increase for stress testing
    50         final int reps = 1;     // increase for stress testing
    53 
    51 
    54         for (int j = 0; j < reps; j++) {
    52         for (int j = 0; j < reps; j++) {
    59     }
    57     }
    60 
    58 
    61     static final class Loops implements Runnable {
    59     static final class Loops implements Runnable {
    62         private final boolean print = false;
    60         private final boolean print = false;
    63         private volatile boolean done = false;
    61         private volatile boolean done = false;
    64         private int v = rnd.nextInt();
    62         private int v = ThreadLocalRandom.current().nextInt();
    65         private int completed = 0;
    63         private int completed = 0;
    66         private volatile int result = 17;
    64         private volatile int result = 17;
    67         private final ReentrantLock lock = new ReentrantLock();
    65         private final ReentrantLock lock = new ReentrantLock();
    68         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
    66         private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
    69         private final CyclicBarrier barrier;
    67         private final CyclicBarrier barrier;
    74             if (print) System.out.print("Threads: " + nthreads);
    72             if (print) System.out.print("Threads: " + nthreads);
    75             barrier = new CyclicBarrier(nthreads+1, timer);
    73             barrier = new CyclicBarrier(nthreads+1, timer);
    76         }
    74         }
    77 
    75 
    78         final void test() throws Exception {
    76         final void test() throws Exception {
       
    77             final ThreadLocalRandom rnd = ThreadLocalRandom.current();
    79             Thread[] threads = new Thread[nthreads];
    78             Thread[] threads = new Thread[nthreads];
    80             for (int i = 0; i < threads.length; ++i)
    79             for (int i = 0; i < threads.length; ++i)
    81                 threads[i] = new Thread(this);
    80                 threads[i] = new Thread(this);
    82             for (int i = 0; i < threads.length; ++i)
    81             for (int i = 0; i < threads.length; ++i)
    83                 threads[i].start();
    82                 threads[i].start();