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

Ali*_*a87 0 java timer multimap guava timertask

我希望在一定的延迟后调用一个特定的方法.我尝试了不同的aproaches,如计时器,执行程序或处理程序.他们满足了他们应该做的事情,但有一点例外.延迟方法调用在番石榴的多图中进行了一些更改.在runTimerTask 的方法中,输出就像我想要的那样.但是如果我打印出多边形图,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
   }
 }
Run Code Online (Sandbox Code Playgroud)

就像我之前说过的那样,打印dataMapat Point1会给出正确的输出,在Point 2处旧的值,比如Method UndoChanges更新的调用.实现了多重映射,更改保持一致,并且通常必须更改值,但这不是这里的情况.我在这里错过了什么?如果有人知道在延迟后调用方法的方法不同,我会很高兴听到它.

谢谢,非常感谢

Mar*_*nik 5

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