26 |
|
* if this program is called with (any) second argument |
27 |
|
*/ |
28 |
|
|
29 |
< |
|
30 |
< |
import java.util.concurrent.*; |
29 |
> |
import java.util.concurrent.CyclicBarrier; |
30 |
|
import java.util.concurrent.atomic.AtomicInteger; |
31 |
|
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; |
32 |
|
import java.util.concurrent.atomic.AtomicLong; |
33 |
< |
import java.util.concurrent.locks.*; |
33 |
> |
import java.util.concurrent.locks.AbstractQueuedSynchronizer; |
34 |
|
|
35 |
|
public class CASLoops { |
36 |
|
|
114 |
|
valueUpdater = AtomicIntegerFieldUpdater.newUpdater |
115 |
|
(UpdaterAtomicInteger.class, "value"); |
116 |
|
|
118 |
– |
|
117 |
|
UpdaterAtomicInteger() {} |
118 |
|
int get() { |
119 |
|
return value; |
159 |
|
synchronized void set(int val) { value = val; } |
160 |
|
} |
161 |
|
|
164 |
– |
|
162 |
|
static final class LockedInteger extends AbstractQueuedSynchronizer { |
163 |
|
int value; |
164 |
|
LockedInteger() {} |
534 |
|
return timer.getTime(); |
535 |
|
} |
536 |
|
|
540 |
– |
|
537 |
|
static long runSynched(int n, long iters) throws Exception { |
538 |
|
LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer(); |
539 |
|
CyclicBarrier b = new CyclicBarrier(n+1, timer); |
569 |
|
System.out.println("\t " + secs + "s run time"); |
570 |
|
} |
571 |
|
|
576 |
– |
|
572 |
|
static void oneRun(int i, long iters, boolean print) throws Exception { |
573 |
|
if (print) |
574 |
|
System.out.println("threads : " + i + |
601 |
|
report("Synchronized: ", stime, ntime, i, iters); |
602 |
|
Thread.sleep(100L); |
603 |
|
} |
609 |
– |
|
610 |
– |
|
604 |
|
} |