[英]Is there a alternative to Thread.sleep in java
这是我的代码
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());
}
}
对此
"线程.睡眠(5 * 60 * 1000);"
代码检查员发出警告
“在循环中调用 Thread.sleep 会导致性能问题”
防止此警告的代码应该是什么
使用 1.8,您还可以使用:
import java.util.concurrent.locks.LockSupport;
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(1000));
根据 Javadoc:
为线程调度目的禁用当前线程,直至指定的等待时间,除非许可可用。
好的部分是,它的签名不会抛出已检查的异常。 因此,您不必尝试捕获(与 Thread.sleep 不同,后者需要处理其 InterruptedException)。 当然,每个都有其适用的用途。
Is there a alternative to Thread.sleep
是的,有办法。 但是,
看起来您想安排一些工作。 您可以使用TimerTask或ScheduledExecutorService来代替它。 所以你问题的后面部分是关于
“在循环中调用 Thread.sleep 会导致性能问题”
这将通过安排任务来解决。
调度任务。
public class Test extends TimerTask{
public static void main(String[] args) {
Test task = new Test();
Timer timer = new Timer();
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 13);
today.set(Calendar.MINUTE, 47);
today.set(Calendar.SECOND, 0);
timer.schedule(task, today.getTime(), TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS));
}
@Override
public void run() {
System.out.println("Running Scheduled Task...!!!");
}
}
您需要为此任务使用秒表计时器而不是线程。 使用这个:org.apache.commons.lang.time.StopWatch 在这里描述: http : //commons.apache.org/lang/
或者你面包车使用石英。 它是一个外部库:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.