gpt4 book ai didi

multithreading - Groovy 中的线程数限制

转载 作者:行者123 更新时间:2023-12-04 14:03:13 34 4
gpt4 key购买 nike

如何限制同时执行的线程数?
这是我的算法示例:

for(i = 0; i < 100000; i++) {
Thread.start {
// Do some work
}
}

我想确保一旦我的应用程序中的线程数达到 100,算法将暂停/等待,直到应用程序中的线程数低于 100。

目前“一些工作”需要一些时间来完成,最终我的应用程序中有数千个线程。最终它用完了线程并且“一些工作”崩溃了。我想通过限制一次可以使用的池数来修复它。

请让我知道如何解决我的问题。

最佳答案

我相信您正在寻找一个 ThreadPoolExecutor在 Java 并发 API 中。这里的想法是,您可以在池中定义最大线程数,然后不要使用 Runnable 启动新线程,只需让 ThreadPoolExecutor负责管理线程的上限。

从这里开始:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html

import java.util.concurrent.*;
import java.util.*;

def queue = new ArrayBlockingQueue<Runnable>( 50000 )
def tPool = new ThreadPoolExecutor(5, 500, 20, TimeUnit.SECONDS, queue);

for(i = 0; i < 5000; i++) {
tPool.execute {
println "Blah"
}
}

ThreadBlockingQueue 构造函数的参数: corePoolSize (5) ,这是系统空闲时要创建和维护的线程数, maxPoolSize (500)要创建的最大线程数,第 3 个和第 4 个参数表明池应该将空闲线程保持至少 20 秒,而 queue 参数是一个存储排队任务的阻塞队列。

您想要处理的是队列大小以及如何处理被拒绝的任务。如果你需要执行 100k 个任务,你要么必须有一个可以容纳 100k 个任务的队列,要么你必须有一个处理被拒绝任务的策略。

关于multithreading - Groovy 中的线程数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13465180/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com