ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/UnboundedQueueFillEmptyLoops.java
Revision: 1.8
Committed: Thu Apr 14 23:16:10 2011 UTC (13 years, 1 month ago) by jsr166
Branch: MAIN
CVS Tags: release-1_7_0
Changes since 1.7: +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 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     Class klass = null;
20     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     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     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 jsr166 1.6 double secs = (double) time / 1000000000.0;
66 dl 1.1 System.out.println("Time: " + secs);
67     }
68    
69     }