ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/ExecutorCompletionServiceLoops.java
Revision: 1.8
Committed: Wed Oct 28 06:30:10 2015 UTC (8 years, 6 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.7: +1 -1 lines
Log Message:
whitespace

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 */
6
7 import java.util.concurrent.*;
8
9 public class ExecutorCompletionServiceLoops {
10 static final int POOLSIZE = 100;
11 static final ExecutorService pool =
12 Executors.newFixedThreadPool(POOLSIZE);
13 static final ExecutorCompletionService<Integer> ecs =
14 new ExecutorCompletionService<Integer>(pool);
15 static boolean print = false;
16
17 public static void main(String[] args) throws Exception {
18 int max = 8;
19 int base = 10000;
20
21 if (args.length > 0)
22 max = Integer.parseInt(args[0]);
23
24 System.out.println("Warmup...");
25 oneTest( base );
26 Thread.sleep(100);
27 print = true;
28
29 for (int i = 1; i <= max; i += (i+1) >>> 1) {
30 System.out.print("n: " + i * base);
31 oneTest(i * base );
32 Thread.sleep(100);
33 }
34 pool.shutdown();
35 }
36
37 static class Task implements Callable<Integer> {
38 public Integer call() {
39 int l = System.identityHashCode(this);
40 l = LoopHelpers.compute2(l);
41 int s = LoopHelpers.compute1(l);
42 l = LoopHelpers.compute2(l);
43 s += LoopHelpers.compute1(l);
44 return new Integer(s);
45 }
46 }
47
48 static class Producer implements Runnable {
49 final ExecutorCompletionService cs;
50 final int iters;
51 Producer(ExecutorCompletionService ecs, int i) {
52 cs = ecs;
53 iters = i;
54 }
55 public void run() {
56 for (int i = 0; i < iters; ++i)
57 ecs.submit(new Task());
58 }
59 }
60
61 static void oneTest(int iters) throws Exception {
62 long startTime = System.nanoTime();
63 new Thread(new Producer(ecs, iters)).start();
64
65 int r = 0;
66 for (int i = 0; i < iters; ++i)
67 r += ecs.take().get().intValue();
68
69 long elapsed = System.nanoTime() - startTime;
70 long tpi = elapsed/ iters;
71
72 if (print)
73 System.out.println("\t: " + LoopHelpers.rightJustify(tpi) + " ns per task");
74
75 if (r == 0) // avoid overoptimization
76 System.out.println("useless result: " + r);
77 }
78
79 }