网站上与 Timer 相关的文章讲了如何使用 Timer 进行编程。
我问一个不同的问题。Java如何执行Timer方法?
既然说不使用while循环检查当前时间是否是需要的时间点来避免耗时的工作,所以我认为Timer并不是简单地通过使用while循环不断检查和比较当前时间和期望的时间来实现的时间点。
谢谢!
我认为 Timer 不是简单地通过使用 while 循环来不断检查当前时间并将其与所需时间点进行比较来实现的。
是的。唯一的优化是;它使用基于 nextExecutionTime 的优先级队列来处理任务。
JavaDoc 状态
Timer 对象是一个单一的后台线程,用于按顺序执行所有定时器的任务。定时器任务应该很快完成。如果一个定时器任务花费了过多的时间来完成,它就会“占用”定时器的任务执行线程。这反过来又会延迟后续任务的执行
定时器类包含
TaskQueue
这是 TimerTasks 的优先级队列,按 nextExecutionTime 排序。TimerThread(queue)
定时器的任务执行线程,等待(queue.wait()
)定时器队列中的任务。TimerThread
有private void mainLoop() {
where Continuous将通过比较来while(true)
继续检查任务nextExecutionTime
currentTimeMillis
currentTime = System.currentTimeMillis();
executionTime = task.nextExecutionTime;
if (taskFired = (executionTime<=currentTime)) {
如果它到达然后调用
if (taskFired) // Task fired; run it, holding no locks
task.run();
根据javadoc
此类不提供实时保证:它使用 Object.wait(long) 方法安排任务。
如果您查看代码,您会发现一个称为主循环的方法。下面复制前几行。
private void mainLoop() {
while (true) {
try {
而且...它在其中使用了一个while循环Object.wait()
来进行等待。