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

时间:2016-03-16 21:38:16

标签: java multithreading platform-sdk

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

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

单纯不睡觉会更好吗?

1 个答案:

答案 0 :(得分:1)

我认为最好的选择(但不是必须)是使用ScheduledExecutor并提交您的检查以在checkInterval之后运行。如果您之前得到响应,可以取消该任务并重新提交新的延迟。

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

  1. 安排响应检查以在checkInterval
  2. 之后运行
  3. 处理回复
  4. 如果"检查"任务仍在等待,取消,更新lastRTime,并重新安排(第1点)
  5. 如果检查任务将被触发,则重新安排。

    这样你就省略了lastRTime和Thread.sleep()invokation timestamp之间的等待时间