java worker thread中的无限循环违反了ScheduledExecutorService的暂停

时间:2012-07-30 17:19:53

标签: java multithreading

大家好我有一串童话故事的问题。该程序将显示一串童话般的灯光,并无限地浏览一系列轻型物体,将它们打开和关闭。

我已将其实现为在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秒再恢复,这是要求。

有人可以帮忙吗?我错过了什么?

1 个答案:

答案 0 :(得分:3)

每次执行都会调用runnable run()方法。你不应该在你的代码中使用while循环,你应该在每个序列完成后从run方法返回。

更新:

OP指出,

一个“运行”应该基于一段时间,所以你的run方法应该跟踪它运行了多长时间。即记录run方法开始时的当前时间,然后保持循环直到30秒,然后从run方法返回。