如何在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 )
并找出以避免调度,只运行一次任务。
干杯,