【发布时间】:2017-09-15 20:35:07
【问题描述】:
使用 Servlet 3.0,我们可以创建异步操作的任务,允许将处理请求的线程返回到容器,该容器现在可以使用它来处理另一个请求。如果我们使用线程池来配置可用于异步请求的线程数,应该如何调整/我们应该考虑哪些参数?
也可以告诉 spring 从 ForkJoin 池中抓取一个线程并进行如下处理:(Taken from this tutorial:
logger.info("Request received");
DeferredResult<String> deferredResult = new DeferredResult<>();
CompletableFuture.supplyAsync(taskService::execute)
.whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
logger.info("Servlet thread released");
我们什么时候应该这样做,而不是使用Callable 采用托管线程池方法?几乎看起来唯一的区别是,在一种情况下,我们可能想要配置 Java 8s commonPool,而 Spring Boot 会从那里抓取线程来执行上述类型的 CompleteableFuture 处理,而在另一种情况下,我们似乎会配置某种类型的Spring 的 ExecutorService。似乎这两种方法几乎没有区别?
【问题讨论】:
标签: java multithreading spring-mvc servlets asynchronous