是否有java.util.concurrent类允许定期启动线程而不阻塞完成?

时间:2014-11-21 22:31:02

标签: java multithreading java.util.concurrent

我有以下要求。

我正在尝试构建一个模拟器,它将在系统上生成负载以进行负载测试。我希望线程每隔X毫秒开始一次,每个线程将启动一个花费Y毫秒的任务,其中Y可能是2或3个数量级。 X

我以为我可以使用ScheduledExecutorService.scheduleAtFixedRate()。它没有奏效。我看到以下javadoc注释解释了原因:

  

如果此任务的执行时间超过其周期,那么   后续处决可能会延迟,但不会同时执行   执行。

并发执行正是我想要的。我想在单独的线程中启动很多任务,让他们做任何事情,使用大线程池,并在完成时完成。重点是为测试负载生成负载。

java.util.concurrent中是否有可以让我这样做的东西?我正在阅读这些javadocs,但他们现在正在旋转。

1 个答案:

答案 0 :(得分:1)

您可以使用scheduleAtFixedRate(control, 10l, 1l, TimeUnit.SEDONDS)调度程序创建和执行新任务(在其他线程中),类似于:

    final ScheduledExecutorService pool = new ScheduledThreadPoolExecutor(100);
    Runnable control = new Runnable()
    {
      public void run() {
        Runnable task = new Runnable() {
          public void run() {
             // do work here
          }
        };
        pool.execute(task);
      };
    };
    pool.scheduleAtFixedRate(control, 5l, 1l, TimeUnit.SECONDS);