1

我想知道 Java 的 Scheduled Thread Pool Executor 是否可以实现以下操作。我希望 STPE 以固定延迟安排多个 Runnable,每个 Runnable 用于来自List<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);
}
4

1 回答 1

0

从技术上讲,没有办法让它们在完全相同的时间运行,但是您可以让它们几乎同时运行。

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

于 2013-10-15T19:59:06.873 回答