ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/Finals.java
Revision: 1.1
Committed: Mon May 2 19:19:38 2005 UTC (19 years ago) by dl
Branch: MAIN
Log Message:
Put misc performance tests into CVS

File Contents

# User Rev Content
1 dl 1.1
2     public class Finals {
3     static int npairs = 2;
4     static int iters = 10000000;
5     static final int LEN = 4;
6     static final Long[] nums = new Long[LEN];
7     static volatile boolean done;
8     static volatile long total;
9    
10     public static void main(String[] args) {
11     for (int i = 0; i < LEN; ++i)
12     nums[i] = new Long(i+1);
13     Thread[] ps = new Thread[npairs];
14     Thread[] as = new Reader[npairs];
15     for (int i = 0; i < npairs; ++i) {
16     ps[i] = new Writer();
17     as[i] = new Reader();
18     }
19     for (int i = 0; i < as.length; ++i) {
20     ps[i].start();
21     as[i].start();
22     }
23     }
24    
25     static long nextRandom(long seed) {
26     return (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
27     }
28    
29     static long initialSeed(Object x) {
30     return (System.currentTimeMillis() + x.hashCode()) | 1;
31     }
32    
33     static class Writer extends Thread {
34     public void run() {
35     long s = initialSeed(this);
36     int n = iters;
37     while (!done && n-- > 0) {
38     int k = (int)(s & (LEN-1));
39     int l = (k+1) & (LEN-1);
40     nums[k] = new Long(s);
41     nums[l] = new Long(s);
42     s = nextRandom(s);
43     if (s == 0) s = initialSeed(this);
44     }
45     done = true;
46     total += s;
47     }
48     }
49    
50     static class Reader extends Thread {
51     public void run() {
52     int n = iters;
53     long s = initialSeed(this);
54     while (s != 0 && n > 0) {
55     long nexts = nums[(int)(s & (LEN-1))].longValue();
56     if (nexts != s)
57     --n;
58     else if (done)
59     break;
60     s = nexts;
61     }
62     done = true;
63     total += s;
64     if (s == 0)
65     throw new Error("Saw uninitialized value");
66     }
67     }
68     }