ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/UnboundedQueueFillEmptyLoops.java
Revision: 1.12
Committed: Sun Oct 23 03:03:24 2016 UTC (7 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.11: +2 -1 lines
Log Message:
fix deprecation warnings for Class#newInstance

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.*;
8 import java.util.concurrent.*;
9 import java.util.concurrent.atomic.*;
10 import java.util.concurrent.locks.*;
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 =
49 (Queue<Integer>) klass.getConstructor().newInstance();
50 int sum = total;
51 int m = rng.nextInt(numbers.length);
52 long startTime = System.nanoTime();
53 for (int k = 0; k < n; ++k) {
54 for (int i = 0; i < k; ++i) {
55 if (m >= numbers.length)
56 m = 0;
57 q.offer(numbers[m++]);
58 }
59 for (Integer p; (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 }