我在线程的run()方法中遇到一个非常奇怪的异常。
public class project extends JApplet implements KeyListener, MouseListener, MouseMotionListener, ActionListener, Runnable {
private boolean gameStarted;
public void init() {
gameStarted = true;
new Thread(this).start();
}
public void run() {
while (true) {
if (gameStarted)
System.out.print("OK");
}
}
}
变量gameStarted为true,但系统不会打印任何内容。这是一个更大的类的一部分,它是我正在进行的游戏的基类。然而,这让我完全难过,我无法理解为什么这不起作用。如果不是gameStarted,我将true
放在if语句中,它会打印出OK。
另请注意,如果我将run()方法更改为以下内容,则只要gameStarted为true,它就会完全按预期工作:
public void run() {
while (true) {
System.out.print(gameStarted);
if (gameStarted)
System.out.print("OK");
}
}
答案 0 :(得分:0)
我认为问题在于你的线程没有看到主线程对变量“gameStarted”(竞争条件)所做的更新。如果你将变量gameStarted变为“volatile”它会有所作为吗?我认为将其设置为volatile会确保您的线程将看到最新值,在这种情况下,主线程设置为“true”。