如何在Java中删除/ postDelayed runnables?

在一个事件发生时,我想运行一个任务/可运行但是在2秒内延迟它的执行。

在这2秒钟内,如果发生相同的事件,我想删除上一个任务并重新发布它 – 再次延迟2秒。

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

那么, 我如何在Java中删除/ postDelayed runnables ,比如Android的Handler( 删除 / postDelayed )?

你可以使用Executors.newScheduledThreadPool来安排任务,你可以按照这篇文章的回答:

 BlockingQueue queue = threadPool.getQueue(); 

为了得到排队的runnables。

要延迟任何任务并“重新启动”延迟,您可以使用Swing计时器 ,如果它正在运行,请使用其方法restart

我想您可以使用ScheduledExecutor来完成此操作,方法是添加一个机制来将排队的任务替换为重新排队的任务。 您可以查看ScheduledThreadPoolExecutor的源代码以提供一个想法,可能会覆盖ScheduledFuture schedule( Runnable command, long delay, TimeUnit unit )并找出以避免调度,只运行一次任务。

干杯,