使用具有相同周期的ScheduledExecutorService运行多个线程

时间:2015-12-22 14:55:00

标签: java multithreading

我可以在我的应用程序中使用多个服务器。对于每个服务器,我需要从服务器获取一些信息到一个解耦的线程,周期为一秒。

如何使用ScheduledExecutorService启动多个{{1}}?我应该为每个线程使用一个独占执行程序,还是我可以使用一个执行程序实例并将所有需要每秒运行的runnable传递给它?

1 个答案:

答案 0 :(得分:1)

您正在寻找的是ScheduledExecutorService#scheduleAtFixedRate()

  

创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,然后在给定的时间段内启用;执行将在initialDelay然后initialDelay+period,然后initialDelay + 2 * period之后开始,依此类推。

这是一个简单的例子:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(NUMBER_OF_THREADS);
executor.scheduleAtFixedRate(new Runnable() {

    @Override
    public void run() {
        // runnable logic           
    }
}, 0, 1, TimeUnit.SECONDS);

您应该在应用程序中使用一个ExecutorService。有关该方法的更多信息,请参阅Javadocs。