gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:19:40 25 4
gpt4 key购买 nike

我希望在一定的延迟后调用特定的方法。我尝试了不同的方法,例如计时器、执行器或处理程序。他们完成了自己应该做的事情,但也有一点异常(exception)。延迟的方法调用对 Guava 的多重映射进行了一些更改。在 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 会给出正确的输出,在 Point 2 打印旧值,就像新调用的方法 UndoChanges 一样。多重映射的实现使更改保持一致,通常值必须已更改,但此处情况并非如此。我在这里缺少什么?如果有人知道延迟后调用方法的不同方法,我会很高兴听到它。

感谢并非常感谢

最佳答案

代码中的第 2 点在您安排撤消任务后立即执行。这是因为 schedule 方法立即返回:它不会等待延迟过去并执行任务。这就是使用计时器的真正意义:安排异步任务在将来的某个时间运行。

关于Java:通过Timer调用方法,但被调用方法所做的更改不会保留在TimerTask之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com