大家好我有一串童话故事的问题。该程序将显示一串童话般的灯光,并无限地浏览一系列轻型物体,将它们打开和关闭。
我已将其实现为在ScheduledExecutorService中执行,并将执行程序设置为初始延迟为零且进一步延迟为30秒
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
`ScheduledFuture sequenceFutre = executor.scheduleWithFixedDelay(sequenceRunnable, 0, 30, TimeUnit.SECONDS);`
我有像这样的
的数组光源列表的循环 try {
while (!pause) {
for (int i = 0; i < theLights.size(); i++) {
Light light = theLights.get(i);
System.out.println(String.format(outputstr, (i + 1), light.turnOn()));
Thread.sleep(HALF_SECOND_INTERVAL);
System.out.println(String.format(outputstr, (i + 1), light.turnOff()));
}
}
} catch (InterruptedException ie) {
ie.printStackTrace();
} catch(Error err) {
err.printStackTrace();
}
我在这里缺少的部分是包含的runnable似乎没有在30秒停止并等待30秒再恢复,这是要求。
有人可以帮忙吗?我错过了什么?
答案 0 :(得分:3)
每次执行都会调用runnable run()
方法。你不应该在你的代码中使用while循环,你应该在每个序列完成后从run方法返回。
更新:
OP指出,一个“运行”应该基于一段时间,所以你的run方法应该跟踪它运行了多长时间。即记录run方法开始时的当前时间,然后保持循环直到30秒,然后从run方法返回。