ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/UnboundedQueueFillEmptyLoops.java
Revision: 1.10
Committed: Sat Dec 20 15:43:58 2014 UTC (9 years, 4 months ago) by jsr166
Branch: MAIN
Changes since 1.9: +1 -2 lines
Log Message:
move declaration into loop initializer

File Contents

# User Rev Content
1 dl 1.1 /*
2     * Written by Doug Lea with assistance from members of JCP JSR-166
3 dl 1.2 * Expert Group and released to the public domain, as explained at
4 jsr166 1.7 * http://creativecommons.org/publicdomain/zero/1.0/
5 dl 1.1 */
6    
7     import java.util.*;
8     import java.util.concurrent.*;
9     import java.util.concurrent.locks.*;
10     import java.util.concurrent.atomic.*;
11    
12     public class UnboundedQueueFillEmptyLoops {
13     static int maxSize = 10000;
14     static Random rng = new Random(3153122688L);
15     static volatile int total;
16     static Integer[] numbers;
17    
18     public static void main(String[] args) throws Exception {
19 jsr166 1.9 Class<?> klass = null;
20 dl 1.1 if (args.length > 0) {
21     try {
22     klass = Class.forName(args[0]);
23 jsr166 1.4 } catch (ClassNotFoundException e) {
24 dl 1.1 throw new RuntimeException("Class " + args[0] + " not found.");
25     }
26     }
27    
28 jsr166 1.3 if (args.length > 2)
29 dl 1.1 maxSize = Integer.parseInt(args[2]);
30    
31     System.out.print("Class: " + klass.getName());
32     System.out.println(" size: " + maxSize);
33    
34     numbers = new Integer[maxSize];
35     for (int i = 0; i < maxSize; ++i)
36     numbers[i] = rng.nextInt(128);
37    
38     oneRun(klass, maxSize);
39     Thread.sleep(100);
40     oneRun(klass, maxSize);
41     Thread.sleep(100);
42     oneRun(klass, maxSize);
43    
44     if (total == 0) System.out.print(" ");
45 jsr166 1.8 }
46 dl 1.1
47 jsr166 1.9 static void oneRun(Class<?> klass, int n) throws Exception {
48 jsr166 1.5 Queue<Integer> q = (Queue<Integer>) klass.newInstance();
49 dl 1.1 int sum = total;
50     int m = rng.nextInt(numbers.length);
51     long startTime = System.nanoTime();
52     for (int k = 0; k < n; ++k) {
53     for (int i = 0; i < k; ++i) {
54     if (m >= numbers.length)
55     m = 0;
56     q.offer(numbers[m++]);
57     }
58 jsr166 1.10 for (Integer p; (p = q.poll()) != null; )
59 dl 1.1 sum += p.intValue();
60     }
61     total += sum;
62     long endTime = System.nanoTime();
63     long time = endTime - startTime;
64 jsr166 1.6 double secs = (double) time / 1000000000.0;
65 dl 1.1 System.out.println("Time: " + secs);
66     }
67    
68     }