gpt4 book ai didi

java - 如何使用异步线程调整/分析线程池配置?

转载 作者:行者123 更新时间:2023-11-30 02:23:27 26 4
gpt4 key购买 nike

使用 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 并发实践》一书的第 8 章:应用线程池。

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

关于java - 如何使用异步线程调整/分析线程池配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com