2011-05-24 167 views
12

我需要安排将来要完成的工作。我能做到这一点在两个方面:TimerTask和Executors.newScheduledThreadPool之间的区别(1)

  1. 创建TimerTask和执行timer.schedule(...);

  2. 使用Executors.newScheduledThreadPool(1)

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
    ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable, 
         runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS); 
    

是什么调度的这2种方式的区别在未来工作?

+1

可能重复的[Java Timer vs ExecutorService?](http://stackoverflow.com/questions/409932/java-timer-vs-executorservice) – marcolopes 2016-03-04 22:06:49

回答

27

最大的区别是Timer会将其所有任务安排在单个后台线程上。另一方面,ExecutorService将创建新线程(如有必要)以运行任务(达到您指定池的大小,此时任务将排队)。

+1

不错,从来不知道。 – asgs 2011-05-24 14:21:23

15

另一个区别是如果有是一个未捕获的例外。在定时器的情况下,后台线程终止,但不会恢复。使用ScheduledExecutor(即使使用单个线程配置),ScheduledExecutor可以在未捕获的异常之后继续。它试图确保所需的线程数正在运行以处理任务。

ScheduledExecutor还会生成一个未来,以防您想与进度进行交互。

相关问题