【发布时间】:2016-12-03 17:45:45
【问题描述】:
我想在特定时间触发 Java 代码,比如说每天早上 1 点。
我写了一个线程如下:
while (true) {
if (currentTime = 1AM) {
doSomething;
}
}
我有点担心,while loop继续运行,它会减慢机器速度,还是占用处理资源?
我的第一个问题是,我在想如果我每秒只循环 1 次,会更好吗?
while (true) {
if (currentTime = 1AM) {
doSomething;
}
Thread.sleep(1000);
}
我的第二个问题是,有时我看到 while loop 写成如下,大部分时间都是为了获取 Java 锁,谁能解释如果我们写 while loop 有多贵 如下(抱歉,如果这是非常基本的问题)?
while (isLock) {
// do nothing
}
doThisIfNoLock();
我扩展上面的思路,如果我创建一个空线程,里面有一个无限的空while loop,线程实际占用了多少资源(处理能力)?因为循环里面没有内容,按照我的想象,循环会跑得很快,最终会占用很多CPU周期?这是真的吗?
【问题讨论】:
-
有调度器来做这些事情。看看石英调度器。如果您使用的是 Spring,则可以安排此类事情。你的方法很糟糕
-
即使
java.util.Timer也比您尝试的要好。 -
你不能运行无限的while循环。它会消耗资源并减慢处理速度。请改用调度程序。
标签: java loops while-loop infinite-loop