Java- For循环 - 每隔一秒调用另一个函数

时间:2018-03-15 17:34:41

标签: java

所以我有一个for循环迭代一个大的列表(所以需要很长时间)。所以我希望它每200秒调用helper.clear()(会话)(当我运行for循环时)。我应该怎么做?

我在其他类似帖子中看到了timer和thread.sleep(),并且不确定哪个更好,或者我的情况有更好的答案。

它类似于:

for(int a : aList) {
    //this for loop takes ~ 10 min

    //call session.clear() every 200 second when we are running the for loop
}

2 个答案:

答案 0 :(得分:1)

Thread.sleep()设计不合理并且难以阅读代码,java.util.Timer更好。

您的代码将类似于:

Timer timer = new java.util.Timer(true);
TimerTask task = new TimerTask() {
    public void run() {
        session.clear();
    }
};

timer.schedule(task, 200L);

您可以逐步简化代码。

第0步

TimerTask task = new TimerTask() {
    public void run() {
        session.clear();
    }
};
new Timer(true).schedule(task, 200L);

第1步

TimerTask task = session::clear;
new Timer(true).schedule(task, 200L);

第2步

new Timer(true).schedule(session::clear, 200L);

答案 1 :(得分:1)

这应该有效:

Timer timer = new Timer();
TimerTask task = () -> {helper.clear(); };
timer.scheduleAtFixedRate(task, 0, 1000 * 200);

使用它的一种巧妙方法是创建一个方法:

public void setRecurrentTask(Runnable runnable, long delay, long interval) {
    Timer timer = new Timer();
    TimerTask task = () -> {runnable.run(); };
    timer.scheduleAtFixedRate(task, delay, interval);
}

然后像这样称呼它:

setRecurrentTask(someClass::someMethodThatRunsEvery200Seconds, 0, 1000 * 200);