如何停止计时器线程以更改变量值
我有一个持续运行的 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应该立即对其他线程可见。