ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/UnboundedQueueFillEmptyLoops.java
Revision: 1.3
Committed: Thu Oct 29 23:09:08 2009 UTC (14 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.2: +1 -1 lines
Log Message:
whitespace

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     * http://creativecommons.org/licenses/publicdomain
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     Class klass = null;
20     if (args.length > 0) {
21     try {
22     klass = Class.forName(args[0]);
23     } catch(ClassNotFoundException e) {
24     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     }
46    
47     static void oneRun(Class klass, int n) throws Exception {
48     Queue<Integer> q = (Queue<Integer>)klass.newInstance();
49     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     Integer p;
59     while ((p = q.poll()) != null)
60     sum += p.intValue();
61     }
62     total += sum;
63     long endTime = System.nanoTime();
64     long time = endTime - startTime;
65     double secs = (double)(time) / 1000000000.0;
66     System.out.println("Time: " + secs);
67     }
68    
69     }