【发布时间】:2016-07-03 00:40:23
【问题描述】:
我希望这个程序无限期地运行,但我不确定最大化 CPU 和内存效率的最佳方法。我创建了一个处理来自服务器的响应的线程,这些响应将每 20 秒左右返回一次。但是,我必须确保服务器仍在发送响应,否则我必须从新服务器获取响应。每次返回响应时,当前系统时间都存储在“lastRTime”中。这里有更好的 Thread.sleep() 替代方案吗?这是我的主线程的结尾。
while(true) {
Thread.sleep(checkInterval);
if (System.currentTimeMillis()-lastRTime > timeDiffThreshold) {
pmsi.beginClose(); //Close the current connection
makeConnection(backupHost,backupPort);
}
}
}
不睡觉会更好吗?
【问题讨论】:
-
并且
lastRTime在收到响应的地方更新? -
最好使用
ScheduledExecutor之类的东西定期执行操作。但是,是的,睡眠意味着您不会最大限度地利用 CPU 做很少有用的工作。 -
不需要循环。您可以通过计算准确地告诉您多长时间要睡多久for,除非您必须担心时钟重置和 DST。
标签: java multithreading platform-sdk