O loop não vê o valor alterado por outro thread sem uma instrução de impressão

No meu código, tenho um loop que espera que algum estado seja alterado em um segmento diferente. O outro thread funciona, mas meu loop nunca vê o valor alterado. Isso espera para sempre. No entanto, quando coloco uma System.out.printlninstrução no loop, de repente ela funciona! Por quê? A...