Java:Timer调用方法,但调用方法所做的更改不会保留在TimerTask之外

时间:2013-10-27 17:01:20

标签: java timer guava timertask multimap

我希望在一定延迟后调用特定方法。我尝试了不同的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更新。实现了多重映射,更改保持一致,并且通常必须更改值,但这不是这里的情况。我在这里错过了什么?如果有人知道在延迟后调用方法的方法不同,我会很高兴听到它。

谢谢,非常感谢

1 个答案:

答案 0 :(得分:5)

计划撤消任务后,代码中的第2点立即执行。这是因为schedule方法立即返回:它不等待延迟传递和执行任务。这真的是使用Timers的重点:安排异步任务在将来的某个时间运行。