【发布时间】:2019-06-21 02:19:44
【问题描述】:
正在构建一个部署在 weblogic 12c 上的 spring boot rest api 应用程序。 我的要求之一是在每个传入请求上运行一些长时间运行的任务。 传入的休息请求可能会导致多个异步任务执行。
由于我不关心响应,也不关心这些任务会导致的任何异常,我选择使用 ExecutorService 而不是 Callable 或 CompletableFuture。
ExecutorService executorService =
Executors.newFixedThreadPool(2, new CustomizableThreadFactory("-abc-"));
然后对于我在控制器中收到的传入请求,运行两个 for 循环并将这些任务分配给 ExecutorService:
for (final String orderId : orderIds) {
for (final String itemId : itemIds) {
exec.execute(new Runnable() {
public void run() {
try {
//call database operation
}catch(Throwable t) {
logger.error("EXCEPTION with {} , {}" ,orderId,itemId
)
}
});
}//for
}//for
我的问题是关于关闭 ExecutorService。 我知道正常关机(shutdown)、混合关机(awaitTermination)或突然关机(shutdownNow)
对于 rest api 应用程序,这三者之间的首选方法是什么?
对于可以创建的线程池的数量是否有任何限制,即创建的 ExecutorService 线程池的数量将由传入请求的数量驱动
【问题讨论】:
标签: java spring multithreading weblogic executorservice