我希望在一定延迟后调用特定方法。我尝试了不同的aproaches,如计时器,执行程序或处理程序。他们满足了他们应该做的事情,但有一点例外。延迟方法调用在番石榴的多图中进行了一些更改。在TimerTask的run
- 方法中,输出就像我想要的那样。但是,如果我在run
之外打印多图,则更改将被撤消,并且我仍然具有旧的多图值。但是我需要更新的,因为我的数据保存在其中,我需要更新的值才能使用。
我的代码看起来像这样:
public class classTimer {
public static void main(String[] args) {
//some code, irrelevant for the task
new Timer().schedule(new TimerTask() {
@Override
public void run() {
dataMap = UndoManager.undoChanges(dataMap, a, hw);
// Point 1
}
}, delay);
// Point 2
}
}
就像我之前说过的那样,在Point1打印dataMap
会给出正确的输出,在第2点,旧的值,比如方法UndoChanges
更新。实现了多重映射,更改保持一致,并且通常必须更改值,但这不是这里的情况。我在这里错过了什么?如果有人知道在延迟后调用方法的方法不同,我会很高兴听到它。
谢谢,非常感谢
答案 0 :(得分:5)
在计划撤消任务后,代码中的第2点立即执行。这是因为schedule
方法立即返回:它不等待延迟传递和执行任务。这真的是使用Timers的重点:安排异步任务在将来的某个时间运行。