java - 如何在不阻塞的情况下使用设定数量的 Java/Groovy 线程执行任务池

标签 java multithreading groovy

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

    CountDownLatch latch = new CountDownLatch(tasks.size);

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

    latch.await(300L, TimeUnit.SECONDS);

我想将并发线程的数量限制为一定数量 t。现在的编写方式是,对于 n 任务,n 线程“立即”创建。我考虑过使用多个锁存器或某种回调,但无法想出一个好的解决方案。

解决方案应在运行线程低于 t 时立即启动新任务线程,直到运行数量达到 t 或没有未运行的任务。

最佳答案

你应该看看 GPars并使用列出的抽象之一。然后您可以指定要在 withPool() 中创建的数字。我喜欢 fork /加入:

withPool(4) { pool ->
  runForkJoin(rootTask) { task ->
    task.eachTask { forkChild(task) }
  }
}

关于java - 如何在不阻塞的情况下使用设定数量的 Java/Groovy 线程执行任务池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921473/

相关文章:

java - 如何遍历对象列表并分配 child ?

c++ - MFC:类似于 Windows Explorer 的应用程序,用于与其主线程并行导出文件

Java 将显式锁与同步方法结合起来

windows - Groovy 无法在 Windows 7 64 上启动

java - rpm-maven-plugin 需要什么先决条件?

JavaMe MIDlet 和 Canvas

java - Gitflow 与 Maven 的工作流程 - 何时构建什么?

python - 防止 pyttsx3 卡住 GUI

sql - 从数据库获取值时出错

eclipse - Groovy Eclipse 插件组织导入