如何使用计时器在Java中运行方法?

时间:2013-12-19 08:22:14

标签: java

如何在递归函数中每隔几秒运行一次此方法。 我希望i变量每隔几秒更新一次,而不是将其打印到控制台。 在javascript中我可以使用setTimeout是否有类似Java中的javascript setTimeout的方法?

final i = 0;
public void timerActions() {
     i = i + 1;
     System.out.println(i);
}

5 个答案:

答案 0 :(得分:1)

您应该使用ScheduledExecutorService

根据Peter Lawrey的评论

更新(谢谢):

方法:

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秒 - 线程休眠的时间量。 这是一种简单的方法,但请注意,在较大的多线程应用程序中,您必须考虑到线程安全和相关问题。

Thread.sleep()

的文档

答案 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);

    }
}