2017-09-15 71 views
0

使用Servlet 3.0,我们可以创建异步操作的任务,从而允许处理请求的线程返回到现在可以用来处理另一个请求的容器。如果我们使用线程池来配置可用于异步请求的线程数,那么应该如何调整/我们应该考虑哪些参数?如何使用异步线程调整/分析线程池配置?

它也可以告诉春季抢从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 8的commonPool,并且Spring Boot会从那里抓取线程来完成上述类型的CompleteableFuture处理,而在另一个中,似乎我们会配置一些类型的ExecutorService for Spring几乎看起来像这样的方法没有区别吗?

回答

1

对于第一部分,我建议你看一下第8章。应用“实践中的Java并发性”一书的线程池。

对于第二部分 - 是的,spring使用提供的线程池自己执行Callable任务,而DeferredResult应该由应用程序处理。它提供了更多的控制,例如应用程序可以在运行时决定是否应该根据某些元数据在单独的线程中运行特定的计算。 DeferredResult也支持回调。