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



我有一个Java应用程序处理不同的地区,例如10个地区。每个区域有不同数量的任务。

我遇到的一个问题是,一个特定的区域(Region A)有很多任务,每个任务对该区域的处理时间很长。因此,如果我使用一个Single Thread Pool,所有区域的任务都会提交给Single Thread Pool,Region A的任务会阻塞其他区域的任务。其他区域的任务只能在块队列中等待,直到Region A的任务完成。

我想实现的是,如果Region A有5000个任务提交给Single Thread Pool,并且每个任务都在长时间处理,其他区域任务可以并行处理,而不会被Region A的任务阻塞。

我有一个要求,不能为Single Thread Pool创建太多的线程,也不建议使用newCachedThreadPool()

我的方法是为每个区域创建1个线程池,总共将创建10个线程池。但我不知道是否有任何问题关于多个线程池,如果有任何其他适当的方式来实现它。

正在运行的线程的处理能力总是受到硬件CPU提供的线程数量的限制-在将线程分配到线程池时请记住这一点。

每个区域使用newFixedThreadPool(int nThreads)

如果你的处理主要是计算密集型的,选择较小的大小;A区可能是newFixedThreadPool(3),其他区域可能是newFixedThreadPool(1)

选择更大的数字,如果你的处理花费很多时间等待线程外部的处理(例如web或db调用)。

实验看看什么能提供可接受的活力。

相关内容

  • 没有找到相关文章

最新更新