如何停止计时器线程以更改变量值

我有一个持续运行的 Timer 类。当它达到五秒时,我想更改一个将由另一个类使用的布尔值。但是,由于它有自己的线程,变量的值不会改变,我无法检索更改后的布尔值。

public class Time extends TimerTask {
Timer s = new Timer();
boolean bool;
int secondsPassed = 0;
Toolkit toolkit = Toolkit.getDefaultToolkit();

public Time() {
    bool = false;
}
TimerTask task = new TimerTask() {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        secondsPassed++;
        if(secondsPassed == 5) {
            System.out.println("Seconds passed: " + secondsPassed);
            toolkit.beep();
            bool = true;
        }
    }
};

public void nextPanel() {
    toolkit = Toolkit.getDefaultToolkit();
    s.scheduleAtFixedRate(task, 1000, 1000);
}

public boolean throwbool() {
    return bool;
}

}

我将如何停止线程,以便五秒钟后“bool”变为真,并且我可以在其他类中返回新值?另一个类是 GUI,因此更改的值作为检查何时切换到另一个面板。

回答

如果bool多个线程访问该变量,则会发生数据竞争。对 所做的修改bool可能对其他线程不可见,除非使用显式同步来控制对 的访问bool。您可以声明boolasvolatile来实现这一点,并且所有对 的更改都bool应该立即对其他线程可见。


以上是如何停止计时器线程以更改变量值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>