特定のメソッドが特定の遅延の後に呼び出されるようにしたい。タイマー、エグゼキューター、ハンドラーなど、さまざまなアプローチを試しました。彼らはやるべきことを果たしますが、少し例外があります。遅延メソッド呼び出しは、グアバからのマルチマップにいくつかの変更を加えます。TimerTaskの -method 内では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
}
}
前に言ったように、dataMap
Point1 で を印刷すると正しい出力が得られ、Point 2 ではメソッドUndoChanges
がより新しく呼び出されたように古い値が得られます。変更が一貫性を保つようにマルチマップが実装されており、通常は値が変更されている必要がありますが、ここではそうではありません。ここで何が欠けていますか?遅延後にメソッドを呼び出す別の方法を誰かが知っている場合は、喜んで聞いてください。
ありがとうございました