Bas*_*Roy 12 java multithreading timer futuretask
我需要安排一些将来要完成的工作.我可以用两种方式做到:
创建TimerTask并执行timer.schedule(...);
用途Executors.newScheduledThreadPool(1):
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable,
runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)这两种方式在未来安排工作有什么区别?
dle*_*lev 27
最大的区别是Timer将在一个后台线程上安排所有任务.另一方面,ExecutorService将创建新线程(如果需要)以运行任务(最多达到您指定的池的大小,此时任务将排队.)
sjl*_*lee 15
另一个区别是,如果有未捕获的异常.如果是Timer,后台线程将被终止,但不会重新启动.使用ScheduledExecutor(即使使用单线程配置),ScheduledExecutor可以在未捕获的异常后继续.它尝试确保运行所需数量的线程来处理任务.
如果您想要与进度交互,ScheduledExecutor还会产生一个未来.