如何在 Java 中 remove/postDelayed runnables?

How to remove/postDelayed runnables in Java?

发生事件时,我想 运行 一个 task/runnable 但延迟 2 秒后执行。

在这 2 秒内,如果发生相同的事件,我想删除之前的任务并重新post 到 运行 - 再次延迟 2 秒。

一个示例场景是后台编译。保存文件后,我等待 2 秒并开始编译 class 和其他,具体取决于 classes。我不想一直这样做 - 特别是如果有自动保存文件的编辑器,比如 IntelliJ IDEA。

那么,我怎样才能 remove/postDelayed 运行启用 Java,就像 Android 的处理程序(remove / postDelayed)?

要延迟任何任务并"restart"延迟,您可以使用Swing timer,如果是运行,请使用其方法restart

我想您可以使用 ScheduledExecutor 来完成此任务,方法是添加一种机制,用重新排队的任务替换排队的任务。您可以查看 ScheduledThreadPoolExecutor 的源代码以给出一个想法,也许会覆盖 ScheduledFuture<?> schedule( Runnable command, long delay, TimeUnit unit ) 的实现并找出避免调度的方法,只有 运行 任务一次。

干杯,

您可以使用 Executors.newScheduledThreadPool 来安排任务, 你可以按照 post 的回答:

BlockingQueue<Runnable> queue = threadPool.getQueue();

为了得到排队的runnables。