我试图启动一个需要每秒执行一次任务的线程。 所以我从现在开始做的就是对这段代码进行循环:
// execute my task
..
lastScan.setTime(lastScan.getTime() + 1000);
long timeToSleep = (lastScan.getTime() - new Date().getTime());
try {
Thread.sleep(timeToSleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
这有效,但我想知道是否有更优雅,更安全的东西,例如当当前日期到达给定时间时唤醒我的线程的函数。
提前感谢您的建议。
答案 0 :(得分:3)
ScheduledExecutorService es = Executors.newScheduledThreadPool(10); //number of threads
从那里开始,类有不同的方法来传递Runnable
对象,你可以在一个单独的线程中运行定时延迟
答案 1 :(得分:2)
答案 2 :(得分:2)
查看Java Timer类,这将有助于您更优雅地进行定时循环。
答案 3 :(得分:1)
你可以使用Timer和TimerTask, 这是一个每5秒打印同一行的示例代码
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
public class TimeReminder {
Timer timer;
public TimeReminder(int seconds) {
timer = new Timer(); //At this line a new Thread will be created
timer.schedule(new RemindTask(), Calendar.getInstance().getTime(), seconds * 1000);
}
class RemindTask extends TimerTask {
@Override
public void run() {
System.out.println("ReminderTask is completed by Java timer");
}
}
public static void main(String args[]) {
new TimeReminder(5);
System.out.println("Timertask is scheduled with Java timer.");
}
}