2001-07-31 10:13:46 +08:00
|
|
|
// Test atomic increment via synchronized blocks.
|
|
|
|
public class SyncTest implements Runnable {
|
|
|
|
static int counter;
|
|
|
|
|
|
|
|
public void run() {
|
2003-07-10 05:07:42 +08:00
|
|
|
// We cache the .class value; otherwise this code is
|
|
|
|
// slow enough that it will time out in some situations.
|
|
|
|
Object lock = SyncTest.class;
|
2001-07-31 10:13:46 +08:00
|
|
|
for (int n = 0; n < 1000000; n++)
|
2003-07-10 05:07:42 +08:00
|
|
|
synchronized (lock) {
|
2001-07-31 10:13:46 +08:00
|
|
|
counter++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
SyncTest test = new SyncTest();
|
|
|
|
Thread[] thr = new Thread[4];
|
|
|
|
|
|
|
|
for (int n = 0; n < thr.length; n++) {
|
|
|
|
thr[n] = new Thread(test);
|
|
|
|
thr[n].start();
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int n = 0; n < thr.length; n++) {
|
|
|
|
try {
|
|
|
|
thr[n].join();
|
|
|
|
} catch (InterruptedException ex) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
System.out.println(counter == 1000000 * thr.length ?
|
|
|
|
"ok" : "fail: " + counter);
|
|
|
|
}
|
|
|
|
}
|