【问题标题】:ScheduledThreadPoolExecutor with multiple Runnables scheduled at exact same time, how to?ScheduledThreadPoolExecutor 有多个 Runnables 同时调度,怎么做?
【发布时间】:2013-10-15 19:51:07
【问题描述】:

我想知道 Java 的调度线程池执行器是否可以实现以下操作。我希望 STPE 以固定延迟安排多个 Runnable,每个 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);
}

【问题讨论】:

  • 你需要一些cron

标签: java concurrency threadpoolexecutor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2016-01-31
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多