假设我有一个运行的线程,里面有一个timer.schedule(task,5000)。 我们现在假设计时器开始运行,并且在线程的某个地方有thread.sleep()。当线程仍处于休眠状态时,5000毫秒通过。计时器的任务是否仍然在它所处的线程处于休眠状态时运行?
由于
答案 0 :(得分:4)
Thread.sleep()不能在线程的某个地方,它可以在任务代码中,因此任务执行将阻塞5000毫秒,然后运行完成。
请注意,java.util.Timer是单线程调度程序,如果任务执行被阻止,Timer将无法执行其他计划任务。请参阅API
对应每个Timer对象是一个后台线程,用于按顺序执行所有计时器的任务。 计时器任务应该快速完成。如果计时器任务花费过多时间来完成,它会“占用”计时器的任务执行线程。反过来,这可以延迟后续任务的执行,这些后续任务可能会在违规任务最终完成时(以及如果)快速连续地“聚集”并执行。