ScheduledThreadPoolExecutor与多个Runnables安排在同一时间,如何?

时间:2013-10-15 19:51:08

标签: java concurrency threadpoolexecutor

我想知道Java的Scheduled Thread Pool Executor是否可以实现以下功能。我希望STPE以固定的延迟安排多个Runnables,每个Runnable来自List<MyObject>的MyObject。我写的下面的代码(下面)似乎没有任何问题。但我也希望所有这些Runnables在同一时间执行。这可能吗,请问我该怎么做?如果没有,还有另一种方法可以实现我的需求吗?另外,我需要线程每1秒执行一次。

private List<MyObject> myObjects...


int corePoolSize = 1;
long initialDelay = 1L;//1 second
long delay = 1L;//1 second
ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(corePoolSize);

for (int i = 0; i < myObjects.size(); i++) {

    stpe.scheduleWithFixedDelay(new Runnable() {
        @Override
        public void run() {

            //DO SOMETHING

        }
    }, initialDelay, delay, TimeUnit.SECONDS);
}

1 个答案:

答案 0 :(得分:0)

技术上没有办法让它们在完全同时运行,但是你可以让它们几乎在同一时间运行。

除了您已经提供的选项之外,您可以让线程首先停在特定的屏障处,然后在主线程打开该屏障后开始工作。为此,Java提供了CyclicBarrier(一次性使用)或Phaser(多种/灵活使用)。