Thread.sleep 是否比不断检查是否满足条件更好?

Is Thread.sleep better than continually checking to see if a condition is met?

我希望此程序无限期地 运行,但我不确定最大化 cpu 和内存效率的最佳方法。我已经创建了一个线程来处理来自服务器的响应,这些响应将每 20 秒左右返回一次。但是,我必须确保服务器仍在发送响应,否则我必须从新服务器获得响应。每次返回响应时,当前系统时间都存储在 'lastRTime' 中。这里有 Thread.sleep() 更好的选择吗?这是我主线程的末尾。

while(true) {
    Thread.sleep(checkInterval);
        if (System.currentTimeMillis()-lastRTime > timeDiffThreshold) {
            pmsi.beginClose();    //Close the current connection
            makeConnection(backupHost,backupPort);
        }
    }
}

干脆不睡觉会更好吗?

我认为最好的选择(但不是必须的)是使用 ScheduledExecutor 并在 checkInterval 之后将检查提交给 运行。如果您能更早地收到回复,您可以取消该任务并重新提交,并延迟新的时间。

所以我会那样(伪代码):

  1. checkInterval
  2. 之后安排对 运行 的响应检查
  3. 处理响应
  4. 如果 "check" 任务仍未决,取消它,更新 lastRTime,然后重新安排(第 1 点)

如果检查任务会触发,则重新安排。

这样你就可以省略 lastRTime 和 Thread.sleep() 调用时间戳之间的等待时间