我们需要做一些异步任务处理,其中大约30-40个请求将在同一时刻到来,每个请求将启动一个异步任务,大约需要大约7-8秒才能完成。
如果已确定java executorservice执行此类任务,那么为此目的的执行者的空闲类型是什么?
我想过使用CachedThreadPool,但我担心的是,如果创建的线程太多会对应用程序产生任何性能影响吗?
另一个选择是使用FixedThreadPool,但我很难想到一个空闲的无线程,它应该用...实例化... 对于这种情况,推荐的Executor是什么,或者我们如何找到正确的执行者?
答案 0 :(得分:1)
我认为您将研究仅限于Executors.*
工厂方法。您应该查看ThreadPoolExecutor
的构造函数范围,您将找到最大线程池大小限制等。
答案 1 :(得分:0)
我想过使用CachedThreadPool,但我的担心是太多了 创建线程会对它产生任何性能影响 应用
您需要测试应用程序的性能影响。
如果它们都不适合应用程序或有一些问题,那么您可以使用自定义线程池执行程序java.util.concurrent.ThreadPoolExecutor
您可以根据需要自定义核心池大小,配置阻塞队列。当达到池大小时,将使用阻塞队列并且任务将排队。