如何使用设置数量的Java/Groovy线程执行任务池而不会阻塞

Jos*_*ehl 2 java groovy multithreading

现在我有这个Groovy代码来运行一系列任务:

    CountDownLatch latch = new CountDownLatch(tasks.size);

    for( task in tasks ) {
        Thread.start worker.curry(task, latch)
    }

    latch.await(300L, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

我想将同时线程的数量限制为一定数量t.它现在的编写方式,对于n任务,n线程"立刻"创建.我想过使用多个锁存器或某种回调,但无法找到一个好的解决方案.

一旦运行线程降到下面t,解决方案应该启动新的任务线程,直到数字运行到达t或没有未运行的任务.

dro*_*del 5

您应该检查GPars并使用列出的抽象之一.然后,您可以在withPool()中指定要创建的编号.我喜欢fork/join:

withPool(4) { pool ->
  runForkJoin(rootTask) { task ->
    task.eachTask { forkChild(task) }
  }
}
Run Code Online (Sandbox Code Playgroud)