欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java CompletableFuture與ForkJoinPool的關系及說明

 更新時間:2025年05月29日 09:44:07   作者:學亮編程手記  
這篇文章主要介紹了Java CompletableFuture與ForkJoinPool的關系及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

CompletableFuture 與 ForkJoinPool 的關系

CompletableFuture 默認使用 ForkJoinPool.commonPool() 來執(zhí)行異步任務,但這不是唯一的選擇。

1. 默認行為

當您使用以下方法創(chuàng)建異步任務時,默認會使用 ForkJoinPool.commonPool()

CompletableFuture.supplyAsync(() -> {...});  // 使用ForkJoinPool.commonPool()
CompletableFuture.runAsync(() -> {...});     // 使用ForkJoinPool.commonPool()

2. 自定義線程池

您也可以顯式指定其他 Executor(線程池):

ExecutorService customExecutor = Executors.newFixedThreadPool(10);
CompletableFuture.supplyAsync(() -> {...}, customExecutor);  // 使用自定義線程池

3. ForkJoinPool 的特點

ForkJoinPool.commonPool() 是一個共享的工作竊取線程池,具有以下特性:

  • 默認線程數(shù)等于 CPU 核心數(shù)減一(Runtime.getRuntime().availableProcessors() - 1)
  • 使用工作竊?。╳ork-stealing)算法,適合處理大量小任務
  • 是 JVM 全局共享的,適合輕量級并行任務

4. 為什么選擇 ForkJoinPool

Java 設計者選擇 ForkJoinPool 作為默認實現(xiàn)是因為:

  1. 工作竊取算法:可以更好地利用多核處理器
  2. 適合異步任務CompletableFuture 通常用于組合多個小任務
  3. 避免線程創(chuàng)建開銷:使用共享池減少資源消耗

5. 實際應用建議

  • CPU密集型任務:使用默認的 ForkJoinPool 通常效果不錯
  • IO密集型任務:建議使用自定義的固定大小線程池(如 Executors.newFixedThreadPool
  • 長時間運行任務:避免使用公共池,以免影響其他使用公共池的功能

6. 示例代碼

import java.util.concurrent.*;

public class CompletableFuturePoolExample {
    public static void main(String[] args) {
        // 默認使用ForkJoinPool.commonPool()
        CompletableFuture<Void> defaultPoolFuture = CompletableFuture.runAsync(() -> {
            System.out.println("Default pool - Thread: " + Thread.currentThread().getName());
        });
        
        // 使用自定義線程池
        ExecutorService customPool = Executors.newFixedThreadPool(2);
        CompletableFuture<Void> customPoolFuture = CompletableFuture.runAsync(() -> {
            System.out.println("Custom pool - Thread: " + Thread.currentThread().getName());
        }, customPool);
        
        // 等待任務完成
        CompletableFuture.allOf(defaultPoolFuture, customPoolFuture).join();
        customPool.shutdown();
    }
}

7. 注意事項

公共池的大小可以通過系統(tǒng)屬性調(diào)整:

System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "8");

在 Java 9+ 中,公共池的默認行為有所改變,使用更保守的線程數(shù)策略

總結(jié)

CompletableFuture 默認確實基于 ForkJoinPool,但可以根據(jù)需要靈活選擇其他線程池實現(xiàn)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java實現(xiàn)郵件發(fā)送的過程及代碼詳解

    Java實現(xiàn)郵件發(fā)送的過程及代碼詳解

    這篇文章主要介紹了Java實現(xiàn)郵件發(fā)送的過程及代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    ThreadLocal是Java中的一個線程本地存儲機制,它允許每個線程擁有一個獨立的本地存儲空間,用于存儲該線程的變量,本文主要介紹了ThreadLocal如何避免內(nèi)存泄漏,需要的朋友可以參考下
    2023-05-05
  • SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解

    這篇文章主要介紹了SpringMVC中的DispatcherServlet結(jié)構(gòu)和初始化詳解,SpringMVC中Spring容器的關系是通過監(jiān)聽方式啟動的,那么Spring與Servlet的Web容器(如:Tomcat、jetty)的關系則是通過DispatcherServlet進行關聯(lián),需要的朋友可以參考下
    2024-01-01
  • Spring中初始化泛型類的方法實例

    Spring中初始化泛型類的方法實例

    這篇文章主要給大家介紹了Spring中如何初始化泛型類,文中給出詳細的介紹和方法實例,對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友可以參考學習,下面來一起看看吧。
    2017-01-01
  • Jvm?sandbox?mock機制的實踐過程

    Jvm?sandbox?mock機制的實踐過程

    這篇文章主要介紹了Jvm?sandbox?mock機制的實踐過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Java手機號碼工具類示例詳解(判斷運營商、獲取歸屬地)

    Java手機號碼工具類示例詳解(判斷運營商、獲取歸屬地)

    這篇文章主要介紹了Java手機號碼工具類示例詳解,通過手機號碼來判斷運營商獲取歸屬地,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java Collections類操作集合詳解

    Java Collections類操作集合詳解

    這篇文章主要介紹了Java Collections類操作集合詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java的分片上傳功能的實現(xiàn)

    Java的分片上傳功能的實現(xiàn)

    本文主要介紹了Java的分片上傳功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 淺談mybatis 樂觀鎖實現(xiàn),解決并發(fā)問題

    淺談mybatis 樂觀鎖實現(xiàn),解決并發(fā)問題

    這篇文章主要介紹了淺談mybatis 樂觀鎖實現(xiàn),解決并發(fā)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java多線程并發(fā)之ReentrantLock

    Java多線程并發(fā)之ReentrantLock

    這篇文章主要介紹了Java?多線程并發(fā)ReentrantLock,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2023-04-04

最新評論