gpt4 book ai didi

java - 如何停止定时器线程改变变量值

转载 作者:行者123 更新时间:2023-12-03 12:51:05 25 4
gpt4 key购买 nike

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

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 所做的修改可能对其他线程不可见。您可以将 bool 声明为 volatile 以实现此目的,并且对 bool 的所有更改都应立即对其他线程可见。

关于java - 如何停止定时器线程改变变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66645473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com