【问题标题】:Timer vs Thread primitive in JavaJava中的定时器与线程原语
【发布时间】:2010-01-09 14:00:02
【问题描述】:

有没有人观察到使用 Thread.sleep(t) 创建一个在 while(true) 循环中工作的线程似乎比在 Java 中创建一个唤醒时间为 t 的 Timer 消耗更多的 CPU?任何具有 JVM 专业知识的人都知道这是为什么?我只是在 Windows 和 Linux x86 上真正尝试过。

【问题讨论】:

  • 认为如果您发布示例代码会有所帮助 - 也许您正在做一些微妙的事情,我们无法从这个描述中看到。

标签: java multithreading timer


【解决方案1】:

根据Javadoc for the Timer class,有一个后台线程可以完成这项工作:

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

您如何观察 CPU 使用情况?您是否尝试过 JVM 分析器?

【讨论】:

  • 我不是——尽管我可以尝试使用 JConsole 或 VisualVM。我只是在安静的机器上使用 Windows 中的 TaskManager。
  • 我会非常厌倦报告的内容——它绝不是一个权威的分析工具。看看使用 VisualVM 分析您的应用程序,因为它会为您提供更多详细信息。
猜你喜欢
  • 2021-12-03
  • 2020-02-25
  • 1970-01-01
  • 2011-05-21
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多