gpt4 book ai didi

java - 传递给 CompletableFuture SupplyAsync Executors.newFixedThreadPool(10) 或 new ForkJoinPool(10) 哪个执行器更好

转载 作者:行者123 更新时间:2023-11-30 05:38:27 24 4
gpt4 key购买 nike

我正在使用 CompletableFuture.supplyAsync,我不想使用 Forkjoinpool.commonpool,我想向它传递一个池。

目前我正在创建静态池引用并使用它,因为我不想为每个请求创建池。

我想知道以下两种方法中哪一种最好。

private static ExecutorService processingPool = Executors.newFixedThreadPool(10);
CompletableFuture.supplyAsync( () -> process(),processingPool);

private static ForkJoinPool processingPool = new ForkJoinPool(10);
CompletableFuture.supplyAsync( () -> process(),processingPool);

我还了解到 ForkJoinPool 在守护进程模式下创建线程。我在所有处理结束时使用“.get”阻塞调用来合并结果。所以我的问题是,如果我在上面使用 forkJoinPool,JVM 会像我使用“.get”阻塞调用一样等待完成,还是会退出,因为它们是守护线程。

最佳答案

So my question here is, in case if I use forkJoinPool in the above does the JVM wait till the completion as I used ".get" blocking call or will it exit as they are daemon threads.

我假设您正在主线程或其他非守护线程中调用get()。在这种情况下,VM 在 get() 调用完成之前不会终止,因此在此之前池中的线程是守护线程还是普通线程并不重要。

获得最终结果后,您的池不再需要执行任何任务,唯一真正的问题是执行干净的虚拟机关闭。您应该shutdown()shutdownNow()池,在这种情况下,您应该看到很少或没有区别。但是,如果您忽略关闭线程池,那么您可能会发现具有固定线程池的程序版本缓慢终止或根本不终止。

关于java - 传递给 CompletableFuture SupplyAsync Executors.newFixedThreadPool(10) 或 new ForkJoinPool(10) 哪个执行器更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172851/

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