我想每4秒执行一次函数,第一组代码完全可以正常运行"测试"每4秒打印一次。
ScheduledExecutorService SES = Executors.newSingleThreadScheduledExecutor();
SES.scheduleAtFixedRate(new UpdateGraph(), 4, 4, TimeUnit.SECONDS);
public class UpdateGraph implements Runnable {
@Override
public void run() {
Log.v("testing", "testing");
}
}
但是,如果我在runnable中有一个for循环,那么"测试"不再像我问的那样延迟。
public class UpdateGraph implements Runnable {
@Override
public void run() {
for (int i = 0; i < numberOfFiles; i++) {
final double t = i;
final int y = i;
lineGraphPosture.addNewPoints(PointPosture.singlePoint(t, getNextX().get(y)));
graphView.repaint();
Log.v("testing", "testing");
}
}
}
我理解问题在于for循环,但未能找出原因?
请某人给一些指导=)
答案 0 :(得分:0)
使用SchedulorExecutorService
时,您必须注意未捕获的异常。如果您的UpdateGraph
在运行时抛出异常,则不会再安排执行。
我建议你将这个块包装在try / catch中并记录最终的异常。
答案 1 :(得分:0)
如果您希望Runnable仅执行 numberOfFiles 次,那么这里的错误选择就是计划执行者。而是采用SingleThreadExecutor并执行以下操作:
ExecutorService executor = Executors.newSingleThreadExecutor();
for (int i = 0; i < numberOfFiles; i++) {
executor.submit(runnable);
try {
executor.awaitTermination(4L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}