在一个事件发生时,我想运行一个任务/可运行但在2秒内延迟它的执行。
在这2秒钟内,如果发生同样的事件,我想删除上一个任务并重新发布它 - 再次延迟2秒。
示例场景是后台编译。保存文件时,我等待2秒钟并开始编译类和其他类,具体取决于类。我不想一直这样做 - 特别是如果有编辑器自动保存文件,比如IntelliJ IDEA。
那么,我如何删除/ postDelayed runnables in Java ,比如Android的Handler(remove / postDelayed)?
答案 0 :(得分:1)
您可以使用Executors.newScheduledThreadPool
来安排任务,
你可以按照post的回答:
BlockingQueue<Runnable> queue = threadPool.getQueue();
以获得排队的runnables。
答案 1 :(得分:0)
延迟任何任务和&#34;重启&#34;延迟,您可以使用Swing timer,如果它正在运行,请使用其方法restart
。
答案 2 :(得分:0)
我认为您可以使用ScheduledExecutor
来完成此操作,方法是添加一个机制来将排队的任务替换为重新排队的任务。你可以查看ScheduledThreadPoolExecutor
的源代码来提出一个想法,或许可以覆盖ScheduledFuture<?> schedule( Runnable command, long delay, TimeUnit unit )
的实现并找出避免调度,只运行一次任务。
干杯,