我有以下代码片段,旨在检查消息是否已发送到电话号码:
public static boolean checkMessages(long sendTime, String phone) {
boolean gotMessage = false;
while (!gotMessage) {
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
gotMessage = MessageHandler.getResponse(sendTime, phone);
}
return gotMessage;
}
此代码本身通过 CompletableFuture
调用,因此它可以与另一个检查并行运行。如果在一定时间内没有满足任何一项检查,则两者都将过期。
现在,根据我的 IDE 和这个站点,由于多种原因,使用 Thread.sleep()
是不好的,所以我想以某种方式从我的代码中删除它。
有没有办法让这个方法永远只返回 true,就像现在一样?
MessageHandler.getResponse()
是我编写的处理程序,用于检查我是否从特定电话号码收到包含特定(硬编码)文本字符串的短信。它确实会在完成检查之前阻止执行,但我使用的 API 具有非常严格的速率限制。 API 不提供回调——它必须手动调用。
最佳答案
您的整个代码的作用不是很清楚。正如其他人评论的那样,了解 MessageHandler
的作用会增加一些上下文。
Thread.sleep
静态调用将使当前线程至少 hibernate 给定的时间,
subject to the precision and accuracy of system timers and schedulers
(参见 API)
如果您的 MessageHandler.getResponse
调用在返回之前阻塞,那么您可能根本不需要 sleep 。
但是,如果此任务“无休止”地重复,您可能希望改用 ScheduledExecutorService
,并根据计划运行它。
底线,Thread.sleep
本身并不是“坏习惯”,但您很少需要实际使用它。
关于java - 我如何避免使用 Thread.sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572918/