Por que este programa Java termina apesar de aparentemente não dever (e não o fez)?

Uma operação sensível no meu laboratório hoje deu errado. Um atuador em um microscópio eletrônico ultrapassou seu limite e, após uma série de eventos, perdi US $ 12 milhões em equipamentos. Eu reduzi mais de 40 mil linhas no módulo defeituoso para isso:

import java.util.*;

class A {
    static Point currentPos = new Point(1,2);
    static class Point {
        int x;
        int y;
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    public static void main(String[] args) {
        new Thread() {
            void f(Point p) {
                synchronized(this) {}
                if (p.x+1 != p.y) {
                    System.out.println(p.x+" "+p.y);
                    System.exit(1);
                }
            }
            @Override
            public void run() {
                while (currentPos == null);
                while (true)
                    f(currentPos);
            }
        }.start();
        while (true)
            currentPos = new Point(currentPos.x+1, currentPos.y+1);
    }
}

Algumas amostras da saída que estou recebendo:

$ java A
145281 145282
$ java A
141373 141374
$ java A
49251 49252
$ java A
47007 47008
$ java A
47427 47428
$ java A
154800 154801
$ java A
34822 34823
$ java A
127271 127272
$ java A
63650 63651

Como não há aritmética de ponto flutuante aqui, e todos nós sabemos que números inteiros com sinal se comportam bem em overflow em Java, eu acho que não há nada de errado com esse código. No entanto, apesar da saída indicar que o programa não atingiu a condição de saída, atingiu a condição de saída (foi atingidoe não alcançado?). Por quê?

Eu notei que isso não acontece em alguns ambientes. Estou dentroOpenJDK 6 no Linux de 64 bits.

questionAnswers(5)

yourAnswerToTheQuestion