这个问题在这里已经有答案了:
如果没有print语句,循环看不到其他线程更改的值(1个答案)
与system.out[duplicate](3个答案)关联的java线程的奇怪行为
上个月关门了。
我有以下代码:
boolean running = true;
while (running) {
MathStackJPanel focused = Main.frame.mainPanel.focused;
//System.out.print("");
if (focused != null) {
Point p = focused.getMousePosition();
ExpressionComponent ep = focused.getUnderPoint(p);
}
}
``` `focused.getUnderPoint(p)` 应该打印某些内容(用于调试),但不打印。我一取消注解 `System.out.print("")` ,代码按预期工作,我在控制台中看到打印的内容(从 `focused.getUnderPoint(p)` ). 为什么这行简单的代码实际上什么也不做,却完全改变了代码的行为?另外,我可以看出while循环中的代码根本没有运行,因为当我取消注解时 `System.out.print("")` 在特定场景中会抛出异常(如预期的那样)。
java是否优化了我的while循环(即使它不应该优化)?
有人想举个更好的例子:
public static Object b = null;
public static void a() {
System.out.println("OK");
}
public static void main(String[] args) {
Thread thread = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
b = 4;
});
thread.start();
while (true) {
//System.out.print("");
if (b != null) {
a();
}
}
}
取消对行的注解以使其工作(打印正常)
暂无答案!
目前还没有任何答案,快来回答吧!