gpt4 book ai didi

java - 将 ExecutorService 与立即 get() 一起使用有什么好处?

转载 作者:行者123 更新时间:2023-12-04 14:37:00 24 4
gpt4 key购买 nike

bounty 58 分钟后到期。回答这个问题有资格获得 +50 声望奖励。
The Student想引起更多的注意这个问题。







我在这里的代码中看到很多

executorService.submit(() -> {
// do stuff
}).get();
...我想知道为什么 executorService 是这样使用的,提交一些你会立即得到的东西?

最佳答案

立即调用 get()强制ExecutorService在执行程序服务的线程池中处理“做事”,而不是本地线程,例如,如果分配给它的最大线程数很小,则可能会阻塞处理,尽管有很多线程在运行以处理请求。
考虑一个只有 1 个线程的执行程序服务的明显示例:

ExecutorService executorService = Executors.newSingleThreadExecutor();
以及从 HttpRequestHandler 调用的示例代码.
通过使用即时 get() “做东西”的处理将被序列化,这可能是可取的或要求的,尽管在它们自己的线程中处理了许多同时请求。
没有 executorService.submit(...).get() 的包装,“做的东西”的处理将在请求处理程序的线程中并行完成,如果“做的东西”特别昂贵或以某种方式受到限制,如果并行性不受限制,这可能很好,或者可能会导致问题。
并行性可以被限制/有界而不是消除,如下所示:
ExecutorService executorService = Executors.newFixedThreadPool(3);
将处理限制为(例如)最多 3 个并发处理“做事”,尽管同时处理了大量请求。

通过选择 Thread 可以实现其他更微妙的效果。其中“做事”运行。考虑:
ExecutorService executorService = Executors.newSingleThreadExecutor(myThreadFactory);
将使“做事”在自定义类型的线程中运行,而不是在为 HttpRequestHandler 选择的线程类型中运行.

关于java - 将 ExecutorService 与立即 get() 一起使用有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66359787/

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