如何避免使用Thread.sleep()?

Kaz*_*lfe 1 java multithreading

我有以下代码片段,旨在检查是否已将消息发送到电话号码:

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;
}
Run Code Online (Sandbox Code Playgroud)

此代码本身通过调用CompletableFuture,因此可以与另一个检查并行运行。如果在一定时间内未满足任何一项检查,则两者都将到期。

现在,根据我的IDE和此站点的说法Thread.sleep(),由于许多原因,使用是不好的,所以我想以某种方式将其从代码中删除。

有没有一种方法可以使此方法像现在一样只返回true?


MessageHandler.getResponse()是我编写的处理程序,用于检查我是否从特定电话号码接收到包含特定(硬编码)文本字符串的文本消息。它会阻塞执行,直到完成检查为止,但是我使用的API的速率限制非常严格。该API不提供回调-必须手动调用。

Men*_*ena 5

整个代码的作用还不是很清楚。正如其他人所评论的那样,知道这样MessageHandler做会增加一些上下文。

Thread.sleep静态调用将使当前线程睡眠至少给定的时间量,

取决于系统计时器和调度程序的精度和准确性

(请参阅API

如果MessageHandler.getResponse调用在返回之前阻塞,那么您可能根本不需要睡眠。

但是,如果“无休止地”重复执行此任务,则可能要改用a ScheduledExecutorService,然后根据计划运行它。

底线Thread.sleep本身并不是“坏习惯”,但是您实际上不需要使用它。