与Timer相关的网站上的文章讨论了如何使用Timer进行编程。
我问了一个不同的问题。 Java如何执行Timer方法?
由于据说通过不使用while循环检查当前时间是否是所需的时间点来避免耗时的工作,我认为Timer不是简单地通过使用while循环来连续检查和比较当前时间来实现的到期望的时间点。
谢谢!
答案 0 :(得分:2)
我认为Timer不是简单地通过连续使用while循环来实现的 检查并将当前时间与所需时间点进行比较。
是的,是的。唯一的优化是;它使用基于nextExecutionTime的优先级队列来执行任务。
JavaDoc陈述
Timer对象是用于的单个后台线程 按顺序执行所有计时器的任务。计时器任务应该 快完成如果计时器任务需要很长时间才能完成, 它"猪#34;计时器的任务执行线程。反过来,这可能会延迟 后续任务的执行
Timer类包含
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();
答案 1 :(得分:1)
根据javadoc
此课程不提供实时保证:它安排任务 使用Object.wait(long)方法。
如果您查看代码,您将找到一个名为main loop的方法。前几行复制在下面。
private void mainLoop() {
while (true) {
try {
并且......它在其中使用了一个while循环以及Object.wait()
来进行等待。