Java可以同时处理10个线程池吗

mdfafbf1  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(147)

我有一个Java应用程序,处理不同的地区,例如10个地区。每个地区有不同数量的任务。
我遇到的一个问题是某个地区(Region A)的任务比较多,每个任务在该区域的处理时间比较长,所以如果我使用一个Single Thread Pool,所有区域的任务都提交给Single Thread PoolRegion A的任务会阻塞其他区域的任务,其他区域的任务只能在阻塞队列中等待Region A的任务完成。
我想实现的是,如果有5000个Region A的任务提交给Single Thread Pool,并且每个任务都在长时间的处理,那么其他区域的任务可以并行处理,而不会被Region A的任务阻塞。
我有一个要求,不能为Single Thread Pool创建太多的线程,也不建议使用newCachedThreadPool()
我的方法是为每个区域创建1个线程池,这样总共会创建10个线程池,但我不知道多线程池是否有问题,是否有其他合适的方法来实现。

bd1hkmkf

bd1hkmkf1#

正在运行的线程的处理能力总是受到硬件CPU提供的线程数量的限制-在将线程分配到线程池时请记住这一点。
每个区域使用newFixedThreadPool(int nThreads)
如果您的处理主要是计算密集型的,选择较小的大小;也许区域A为newFixedThreadPool(3),其它区域为newFixedThreadPool(1)
如果您的处理花费大量时间等待线程外部的处理(例如Web或数据库调用),请选择较大的数字。
试验一下,看看什么能提供可接受的活泼性。

相关问题