0

我在线程的 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 为真,但系统不会打印任何结果。这是一个更大的类的一部分,它是我正在开发的游戏的基类。然而,这让我完全被难住了,我不明白为什么这不起作用。如果我放入 if 语句而不是 gameStarted true,它确实打印出来了。

另请注意,如果我将 run() 方法更改为以下内容,它会完全按照预期工作,因为 gameStarted 为真:

public void run() {
     while (true) {
        System.out.print(gameStarted);
        if (gameStarted)
           System.out.print("OK");
     }  
  }
4

1 回答 1

0

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

于 2013-04-19T02:52:32.327 回答