public class Race2 { public static void main(String[] args) { Counter2 c = new Counter2(); CountThread2 c1 = new CountThread2(c, 1); CountThread2 c2 = new CountThread2(c, -1); c1.start(); c2.start(); while (!c1.isFinished() || !c2.isFinished()) { System.out.print("."); } System.out.println(); System.out.println("c: " + c.getX()); } } class Counter2 { private int x = 0; public int getX() {return x;} public synchronized void increaseX(int incr) {x = x + incr;} } class CountThread2 extends Thread { private int incr; private Counter2 counter; private boolean finished; public CountThread2(Counter2 c, int i) { counter = c; incr = i; finished = false; } public boolean isFinished() {return finished;} public void run() { for (int i = 0; i < 1000000; ++i) { counter.increaseX(incr); } finished = true; } }