1

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

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

干脆不睡觉会更好吗?

4

1 回答 1

1

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

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

  1. 安排响应检查在之后运行checkInterval
  2. 处理响应
  3. 如果“检查”任务仍处于挂起状态,请取消它、更新lastRTime并重新安排(第 1 点)

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

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

于 2016-03-16T21:43:46.173 回答