所以我有一个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
}
答案 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);
您可以逐步简化代码。
TimerTask task = new TimerTask() {
public void run() {
session.clear();
}
};
new Timer(true).schedule(task, 200L);
TimerTask task = session::clear;
new Timer(true).schedule(task, 200L);
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);