如何在递归函数中每隔几秒运行一次此方法。 我希望i变量每隔几秒更新一次,而不是将其打印到控制台。 在javascript中我可以使用setTimeout是否有类似Java中的javascript setTimeout的方法?
final i = 0;
public void timerActions() {
i = i + 1;
System.out.println(i);
}
答案 0 :(得分:1)
您应该使用ScheduledExecutorService
。
更新(谢谢):
方法:
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
long initialDelay,
long period,
TimeUnit unit);
和
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
long initialDelay,
long delay,
TimeUnit unit);
可用于实现您期望的行为。
答案 1 :(得分:1)
尝试使用Timer
Timer timer = new Timer("Display Timer");
TimerTask task = new TimerTask() {
@Override
public void run() {
timerActions();
}
};
// This will invoke the timer every second
timer.scheduleAtFixedRate(task, 1000, 1000);
}
答案 2 :(得分:0)
如果只是一个简单的应用程序,只需要“慢一点”就可以让Thread
在执行后进入休眠状态。
例如:
final i = 0;
public void timerActions() {
i++;
System.out.println(i);
Thread.sleep(1000);
}
括号中的1000表示1000ms = 1秒 - 线程休眠的时间量。 这是一种简单的方法,但请注意,在较大的多线程应用程序中,您必须考虑到线程安全和相关问题。
的文档答案 3 :(得分:0)
public class TimedAction
{
public static void main(String[] args) throws Exception
{
System.out.println("begin");
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable command = new Runnable()
{
private int i = 0;
@Override
public void run()
{
// put your logic HERE
System.out.println(i++);
}
};
// execute command, immediately (0 delay), and every 2 seconds
executor.scheduleAtFixedRate(command, 0, 2, TimeUnit.SECONDS);
System.in.read();
executor.shutdownNow();
executor.awaitTermination(5, TimeUnit.SECONDS);
System.out.println("end");
}
}
答案 4 :(得分:0)
这将每2秒打印一次“Counting ...”
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
private int counter = 0;
public void run() {
counter++;
if (counter <= 3) {
System.out.println("Counting - counter = " + counter);
} else {
System.out.println("Stopping timer execution");
this.cancel();
}
}
public static void main(String[] args) {
Timer timer = new Timer("TimerThreadName");
MyTimerTask task = new MyTimerTask();
// void java.util.Timer.schedule(TimerTask task, long delay, long period)
timer.schedule(task, 0, 2000);
}
}