繁体   English   中英

java中是否有Thread.sleep的替代品

[英]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

是的,有办法。 但是

看起来您想安排一些工作。 您可以使用TimerTaskScheduledExecutorService来代替它。 所以你问题的后面部分是关于

“在循环中调用 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/

或者你面包车使用石英。 它是一个外部库:

http://www.quartz-scheduler.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM