【问题标题】:Difference between TimerTask and Executors.newScheduledThreadPool(1)TimerTask 和 Executors.newScheduledThreadPool(1) 的区别
【发布时间】:2011-08-31 23:36:37
【问题描述】:

我需要安排一些将来要完成的工作。我可以通过两种方式做到这一点:

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

  2. 使用Executors.newScheduledThreadPool(1):

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

这两种安排未来工作的方式有什么区别?

【问题讨论】:

标签: java multithreading timer futuretask


【解决方案1】:

最大的不同是 Timer 将把它的所有任务安排在一个后台线程上。另一方面,ExecutorService 将创建新线程(如有必要)来运行任务(直到您指定的池大小,此时任务将排队。)

【讨论】:

    【解决方案2】:

    另一个区别是是否存在未捕获的异常。在 Timer 的情况下,后台线程会终止,但不会重新启动。使用 ScheduledExecutor(即使是单线程配置),ScheduledExecutor 可以在未捕获的异常之后继续。它试图确保正在运行所需数量的线程来处理任务。

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

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 2018-08-05
      • 2022-10-01
      • 2018-08-02
      • 2014-02-13
      • 2015-07-13
      • 2013-06-18
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多