2013-10-27 58 views
0

我希望在某個延遲之後調用特定的方法。我嘗試了不同的方法,如計時器,執行器或處理程序。他們完成他們應該做的事情,但有一點例外。延遲方法調用在番石榴的multimap中進行了一些更改。在run - TimerTask的方法中,輸出就像我想要的那樣。但是,如果我在run之外打印multimap,那麼這些更改將被撤銷,並且我仍然擁有舊的multimap值。但我需要更新的,因爲我的數據保存在其中,我需要更新的值才能使用。Java:通過Timer調用方法,但被調用的方法所做的更改不會保留在TimerTask之外

我的代碼看起來像這樣:

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 
    } 
} 

就像我以前說過,印刷dataMap點1處給出正確的輸出,在第2點的舊值,如法UndoChanges是較新的調用。多變量映射實現的變化保持一致,通常這些值必須被改變,但這不是這種情況。我在這裏錯過了什麼?如果有人知道延遲後調用方法的另一種方法,我會很高興聽到它。

感謝,並在你的代碼非常讚賞

+2

點2發生在點1之前。 – tom

回答

5

2點後,您可以立即執行時間表取消任務。這是因爲schedule方法立即返回:它不會等待延遲通過並執行任務。這確實是使用計時器的要點:計劃異步任務在未來的某個時間運行。

+0

沒有想過這個,因爲延遲是在微秒的領域,但你是對的,謝謝你。 – Alika87

相關問題