java中是否有Thread.sleep的替代方案

vir*_*wee 3 java multithreading

这是我的代码

while (true) {
    try {
        Thread.sleep(5 * 60 * 1000);
        processData();// data processing job
    } catch (InterruptedException e) {
        SystemMessageBillPay.getInstance().writeMessage("ERROR: CEB.run() - " + e.getMessage());
    } catch (NumberFormatException e) {
        SystemMessageBillPay.getInstance().writeMessage("ERROR: CEB.run() - " + e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

对此

“线程.睡眠(5 * 60 * 1000);”

代码检查员发出警告

“在循环中调用 Thread.sleep 可能会导致性能问题”

应该使用什么代码来防止出现此警告

Jat*_*tin 8

在 1.8 中,您还可以使用:

import java.util.concurrent.locks.LockSupport;

LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(1000));
Run Code Online (Sandbox Code Playgroud)

根据 Javadoc:

出于线程调度目的禁用当前线程,直到指定的等待时间,除非许可可用。

好的部分是,它的签名不会抛出检查异常。所以你不必尝试捕获(不像Thread.sleep,它需要处理它的InterruptedException)。当然,每种都有其自己的适用用途。