我希望这个程序无限期运行,我不确定最大化cpu和内存效率的最佳方法。我创建了一个处理来自服务器响应的线程,这些响应将每20秒左右返回一次。但是,我必须确保服务器仍在发送响应,否则我必须从新服务器获得响应。每当响应返回时,当前系统时间都存储在< lastRTime'中。这里有更好的Thread.sleep()替代方案吗?这是我主线的结尾。
while(true) {
Thread.sleep(checkInterval);
if (System.currentTimeMillis()-lastRTime > timeDiffThreshold) {
pmsi.beginClose(); //Close the current connection
makeConnection(backupHost,backupPort);
}
}
}
单纯不睡觉会更好吗?
答案 0 :(得分:1)
我认为最好的选择(但不是必须)是使用ScheduledExecutor
并提交您的检查以在checkInterval
之后运行。如果您之前得到响应,可以取消该任务并重新提交新的延迟。
所以我会那样(伪代码):
checkInterval
lastRTime
,并重新安排(第1点)如果检查任务将被触发,则重新安排。
这样你就省略了lastRTime和Thread.sleep()invokation timestamp之间的等待时间