Java的Timer任务是否保证不会同时运行?

时间:2009-08-06 09:12:30

标签: java concurrency timer

new Timer(...).schedule(task)

task是否保证在任何给定时间由单个线程运行?

3 个答案:

答案 0 :(得分:7)

来自Javadoc

  

对应每个Timer对象是一个后台线程,用于按顺序执行所有计时器的任务。计时器任务应该快速完成。如果计时器任务花费过多时间来完成,它会“占用”计时器的任务执行线程。反过来,这可以延迟后续任务的执行,后续任务可以在紧急任务最终完成时(以及如果)快速连续地“聚集”并执行。

所以,是的,你得到一个新的线程(与调用者的线程分开)。该计时器中的每个任务都共享同一个线程。

答案 1 :(得分:2)

每个计时器有一个单独的线程,所以问题的答案是肯定的

答案 2 :(得分:0)

事实上。它们都按顺序对应于Timer对象的相同后台线程运行。但是我会在不同的线程上运行两个不同的Timer实例(我相信),因此您必须保存对计时器对象的引用,以便按顺序安排更多任务。