ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleWithFixedDelay(new Runnable(){
public void run() {
updateList();
}
}, updateTime, updateTime, TimeUnit.MINUTES);
我做错了什么?
提前致谢。
答案 0 :(得分:0)
看起来你正在以正确的方式做到这一点。 这让我读了java文档,这里是我发现的,我发现自己很惊讶。
如果任务的任何执行遇到异常,则后续 执行被压制。
ScheduledExecutorService.scheduleWithFixedDelay()
runnable中的代码是否有可能产生异常,导致Scheduled Executor终止执行?你肯定会提到那个吗?
但正如我所说的那样,我发现这令人惊讶,因为我认为Scheduled Executor会处理异常,因此不会抑制后续任务执行。而这是首选的主要原因之一,而不是经典的Timer。但现在我在javadoc中看到我显然认为错了......
我对Android平台并不是很熟悉,但是Oracle的JVM和Android的Dalvik之间的java.util.concurrent设备可能存在差异,所以考虑到Oracle的JVM javadocs可能不是一个好主意。
编辑: 实际上,工厂方法的javadoc说明了
(但请注意,如果此单个线程由于失败而终止 在关闭之前执行期间,如果是,新的将取代它 需要执行后续任务。)
Executors.newSingleThreadScheduledExecutor()
EDIT2: Oracle和Dalvik的java doc似乎几乎无法区分。