网站上与Timer有关的文章讨论了如何使用Timer进行编程。
我问一个不同的问题。
Java如何执行Timer方法?
因为据说通过不使用while循环来检查当前时间是否是所需时间点来避免耗时的工作,所以我认为不能简单地通过使用while循环来连续检查并将当前时间与所需时间进行比较来实现Timer时间点。
谢谢!
最佳答案
是的,是的。 唯一的优化是;它使用基于nextExecutionTime的优先级队列执行任务。
JavaDoc状态
计时器类包含
TaskQueue
是TimerTasks的优先级队列,在nextExecutionTime上排序。 TimerThread(queue)
计时器的任务执行线程,该线程等待(queue.wait()
)等待计时器队列上的任务。 TimerThread
具有private void mainLoop() {
,其中连续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();