我想知道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);
}
答案 0 :(得分:0)
技术上没有办法让它们在完全同时运行,但是你可以让它们几乎在同一时间运行。
除了您已经提供的选项之外,您可以让线程首先停在特定的屏障处,然后在主线程打开该屏障后开始工作。为此,Java提供了CyclicBarrier(一次性使用)或Phaser(多种/灵活使用)。