ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/UnboundedQueueFillEmptyLoops.java
Revision: 1.2
Committed: Mon Feb 19 00:46:06 2007 UTC (17 years, 3 months ago) by dl
Branch: MAIN
Changes since 1.1: +2 -2 lines
Log Message:
Uniform headers

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/licenses/publicdomain
5 */
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 if (args.length > 2)
29 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 }