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

File Contents

# User Rev Content
1 dl 1.2 /*
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 dl 1.1
7     public class FinalLongTest {
8     static int npairs = 2;
9     static int iters = 10000000;
10     static int LEN = 2;
11     static final Long[] nums = new Long[LEN];
12     static volatile boolean done;
13     static volatile long total;
14     static Long n0 = new Long(21);
15     static Long n1 = new Long(22);
16     static Long n2 = new Long(23);
17     static Long n3 = new Long(23);
18 jsr166 1.3
19 dl 1.1
20     public static void main(String[] args) {
21     for (int i = 0; i < LEN; ++i)
22     nums[i] = new Long(i+1);
23     Thread[] ps = new Thread[npairs];
24     Thread[] as = new Reader[npairs];
25     for (int i = 0; i < npairs; ++i) {
26     ps[i] = new Writer();
27     as[i] = new Reader();
28     }
29     for (int i = 0; i < as.length; ++i) {
30     ps[i].start();
31     as[i].start();
32     }
33     }
34    
35 jsr166 1.3 static long nextRandom(long seed) {
36 dl 1.1 return (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
37     }
38    
39     static long initialSeed(Object x) {
40     return (System.currentTimeMillis() + x.hashCode()) | 1;
41     }
42    
43     static class Writer extends Thread {
44     public void run() {
45     long s = initialSeed(this);
46     int n = iters / 2;
47     Long[] ns = nums;
48    
49     while (n-- > 0) {
50     // int k = (int)(s & (LEN-1));
51     // if (k < 0 || k >= LEN) k = 1;
52     // int l = (k+1) & (LEN-1);
53     // if (l < 0 || l >= LEN) l = 0;
54     // int k = (s & 1) == 0? 0 : 1;
55     // int l = (k == 0)? 1 : 0;
56     if ((s & (LEN-1)) == 0) {
57     n3 = n1;
58     n0 = new Long(s);
59     n2 = n1;
60     n1 = new Long(s);
61     }
62     else {
63     n3 = n0;
64     n1 = new Long(s);
65     n2 = n0;
66     n0 = new Long(s);
67     }
68     s = nextRandom(s);
69     if (s == 0) s = initialSeed(this);
70     }
71     done = true;
72     total += s;
73     }
74     }
75    
76     static class Reader extends Thread {
77     public void run() {
78     int n = iters;
79     long s = initialSeed(this);
80     while (s != 0 && n > 0) {
81     long nexts; // = nums[(int)(s & (LEN-1))].longValue();
82     if ((s & (LEN-1)) == 0)
83     nexts = n0.longValue();
84     else
85     nexts = n1.longValue();
86     if (nexts != 0) {
87     if ((s & 4) == 0)
88     nexts = n2.longValue();
89     else
90     nexts = n3.longValue();
91     }
92    
93 jsr166 1.3 if (nexts != s)
94 dl 1.1 --n;
95     else if (done)
96     break;
97     s = nexts;
98     }
99     done = true;
100     total += s;
101 jsr166 1.3 if (s == 0)
102 dl 1.1 throw new Error("Saw uninitialized value");
103     }
104     }
105     }