我正在基于JDK1.8的基于Groovy的项目构建中工作。我想介绍一个基于通用线程创建逻辑以及不同线程池中所有活动线程的总和的自定义线程创建逻辑。我已经在我的自定义生成ThreadExecutor类中启动了所有已定义的线程池执行器,如下所示,
for(ThreadPoolType threadPoolType:ThreadPoolType.values()) {
executorServiceMap.put(threadPoolType, new ThreadPoolExecutor(
minThreads,
maxThreads,
threadKeepAliveSec,
TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(8),
new CustomizableThreadFactory("pool-${threadPoolType.getPoolName()}-thread-")))
}
目前,我们为每个池设置了固定的coreSize和maxThread大小,但是在实际实现中,池的大小有所不同。这就是我们提交异步任务的方式,
CompletableFuture<IchibaHttpResponse> post(A a, B b, Executor executor){
return CompletableFuture.supplyAsync({
return someExecutionHere(a, b);
}, executor)
}
好吧,现在,我想每次on_submit一个新任务给执行者时监视活动线程的总数,并为所有线程池中活动线程的最大数目设置一个阈值限制。因此,我不仅可以根据单个池的maxSize来控制线程,而且还可以控制线程总数。假设,对于我的4个线程池,最大大小估计像A(20),B(40),C(60)和D(80)。因此,在最坏的情况下,一次将有200个线程,这可能会导致整体系统性能下降。因此,我想在此处设置另一个边界,即total_thread_threashold限制100。在这种情况下,对于A(15),B(30),C(35),D(10)= All(100),否如果提交了任何任务,则将创建新线程,并且对于特定队列仍然空闲,该任务将进入队列,否则将被丢弃。请让我知道在理解我的问题时是否有任何困惑。谢谢。