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;
    }
}
