这是我的代码
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());
}
}
到这个
" Thread.sleep(5 * 60 * 1000);"
代码检查员发出警告
"在循环中调用Thread.sleep会导致性能问题"
防止此警告的代码应该是什么
答案 0 :(得分:1)
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...!!!");
}
}
答案 1 :(得分:0)
您需要为此任务使用秒表计时器而不是线程。使用此:org.apache.commons.lang.time.StopWatch在此处描述:http://commons.apache.org/lang/
答案 2 :(得分:0)
或者你使用Quartz。这是一个外部图书馆:
答案 3 :(得分:0)
对于1.8,您还可以使用:
import java.util.concurrent.locks.LockSupport;
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(1000));
根据Javadoc:
除非允许使用许可,否则在指定的等待时间内禁用用于线程调度目的的当前线程。