简单上下文中的Java异常

时间:2013-04-19 02:34:22

标签: java

我在线程的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");
     }  
  }

1 个答案:

答案 0 :(得分:0)

我认为问题在于你的线程没有看到主线程对变量“gameStarted”(竞争条件)所做的更新。如果你将变量gameStarted变为“volatile”它会有所作为吗?我认为将其设置为volatile会确保您的线程将看到最新值,在这种情况下,主线程设置为“true”。