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
之后将检查提交给 运行。如果您能更早地收到回复,您可以取消该任务并重新提交,并延迟新的时间。
所以我会那样(伪代码):
- 在
checkInterval
之后安排对 运行 的响应检查
- 处理响应
- 如果 "check" 任务仍未决,取消它,更新
lastRTime
,然后重新安排(第 1 点)
如果检查任务会触发,则重新安排。
这样你就可以省略 lastRTime 和 Thread.sleep() 调用时间戳之间的等待时间
我希望此程序无限期地 运行,但我不确定最大化 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
之后将检查提交给 运行。如果您能更早地收到回复,您可以取消该任务并重新提交,并延迟新的时间。
所以我会那样(伪代码):
- 在
checkInterval
之后安排对 运行 的响应检查
- 处理响应
- 如果 "check" 任务仍未决,取消它,更新
lastRTime
,然后重新安排(第 1 点)
如果检查任务会触发,则重新安排。
这样你就可以省略 lastRTime 和 Thread.sleep() 调用时间戳之间的等待时间