// Test atomic increment via synchronized blocks. public class SyncTest implements Runnable { static int counter; public void run() { // We cache the .class value; otherwise this code is // slow enough that it will time out in some situations. Object lock = SyncTest.class; for (int n = 0; n < 1000000; n++) synchronized (lock) { 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); } }