国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java 并發神器:LatchUtils 一招搞定復雜異步同步!

開發 前端
在高并發系統中,簡單往往意味著穩定。LatchUtils?并不是為了替代 JDK 的并發框架,而是為了在特定場景下,提供一種更符合直覺的方式來管理異步任務。

在現代 Java 應用開發中,并發幾乎是提升性能的“標配”。無論是并行調用多個微服務接口、批量查詢數據庫,還是執行密集計算,我們都離不開異步與并行。

然而,當主線程需要等待多個異步任務完成后再繼續執行時,開發者往往需要手動編寫大量控制邏輯。例如使用 ExecutorServiceCountDownLatchCompletableFuture 等工具時,總會出現冗余的樣板代碼(如 latch.countDown()、異常處理、await 等)。

這些重復性邏輯不僅分散了業務重點,還讓代碼顯得笨重。

于是,我們引入了一個輕量級的并發封裝工具 —— LatchUtils。 它秉持“多次提交,一次等待”的核心設計理念,讓異步任務的管理變得極其簡潔。

設計思想:多次提交,一次等待

LatchUtils 的核心思想是將任務注冊與任務等待分離:

  • 任務注冊階段:通過 submitTask() 方法注冊多個任務及其對應線程池;
  • 等待階段:在所有任務提交完成后,調用一次 waitFor() 即可觸發執行并同步等待。

簡單來說,你只需要兩步:

  1. 提交所有異步任務
  2. 等待全部執行完畢

而不需要再關心 CountDownLatch 的創建、計數或中斷異常。

項目路徑結構

/src
 └── main
     └── java
         └── com
             └── icoderoad
                 └── utils
                     └── LatchUtils.java

核心代碼實現

以下是經過優化的 LatchUtils 實現。 相比傳統寫法,它自動管理任務生命周期,使用 ThreadLocal 確保任務隔離,讓多線程調用更安全。

package com.icoderoad.utils;


import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;


/**
 * LatchUtils - 輕量級異步任務協調工具
 * 核心設計:多次提交,一次等待。
 */
public class LatchUtils {


    // 使用 ThreadLocal 存儲當前線程提交的任務列表,保證線程隔離
    private static final ThreadLocal<List<TaskInfo>> TASK_POOL = ThreadLocal.withInitial(LinkedList::new);


    /**
     * 提交異步任務
     * @param executor 指定線程池執行任務
     * @param runnable 任務邏輯
     */
    public static void submitTask(Executor executor, Runnable runnable) {
        TASK_POOL.get().add(new TaskInfo(executor, runnable));
    }


    // 獲取并清空任務列表
    private static List<TaskInfo> popTask() {
        List<TaskInfo> taskInfos = TASK_POOL.get();
        TASK_POOL.remove();
        return taskInfos;
    }


    /**
     * 觸發所有任務執行,并同步等待完成
     * @param timeout  最大等待時間
     * @param timeUnit 時間單位
     * @return 是否在超時前全部完成
     */
    public static boolean waitFor(long timeout, TimeUnit timeUnit) {
        List<TaskInfo> taskInfos = popTask();
        if (taskInfos.isEmpty()) return true;


        CountDownLatch latch = new CountDownLatch(taskInfos.size());


        for (TaskInfo taskInfo : taskInfos) {
            taskInfo.executor.execute(() -> {
                try {
                    taskInfo.runnable.run();
                } finally {
                    latch.countDown();
                }
            });
        }


        try {
            return latch.await(timeout, timeUnit);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return false;
        }
    }


    // 內部任務封裝類
    private static final class TaskInfo {
        private final Executor executor;
        private final Runnable runnable;


        TaskInfo(Executor executor, Runnable runnable) {
            this.executor = executor;
            this.runnable = runnable;
        }
    }
}

API 使用說明

方法名

說明

參數

返回值

submitTask(Executor, Runnable)

注冊一個異步任務

executor:執行線程池runnable:任務邏輯

waitFor(long, TimeUnit)

啟動所有任務并等待完成

timeout:超時時間timeUnit:時間單位

true - 全部成功false - 超時

?? 調用 waitFor() 后,當前線程的任務列表會被自動清理,可安全重復使用。

實戰演示:聚合并行任務的優雅寫法

我們以一個聚合服務為例: 主流程需要并行調用 用戶服務訂單服務 和 商品服務,在它們全部完成后再繼續。

package com.icoderoad.demo;


import com.icoderoad.utils.LatchUtils;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;


public class Main {


    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);


        System.out.println("主流程開始,準備分發異步任務...");


        // 注冊異步任務
        LatchUtils.submitTask(executorService, () -> {
            System.out.println("開始獲取用戶信息...");
            sleep(1000);
            System.out.println("獲取用戶信息成功!");
        });


        LatchUtils.submitTask(executorService, () -> {
            System.out.println("開始獲取訂單信息...");
            sleep(1500);
            System.out.println("獲取訂單信息成功!");
        });


        LatchUtils.submitTask(executorService, () -> {
            System.out.println("開始獲取商品信息...");
            sleep(500);
            System.out.println("獲取商品信息成功!");
        });


        System.out.println("所有異步任務已提交,主線程開始等待...");


        boolean allDone = LatchUtils.waitFor(5, TimeUnit.SECONDS);


        if (allDone) {
            System.out.println("所有任務執行完成,主流程繼續...");
        } else {
            System.err.println("有任務執行超時,主流程中斷!");
        }


        executorService.shutdown();
    }


    private static void sleep(long millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

運行結果:

主流程開始,準備分發異步任務...
所有異步任務已提交,主線程開始等待...
開始獲取商品信息...
開始獲取用戶信息...
開始獲取訂單信息...
獲取商品信息成功!
獲取用戶信息成功!
獲取訂單信息成功!
所有任務執行完成,主流程繼續...

傳統寫法對比

方式一:使用 CountDownLatch(手動控制)

開發者需要顯式創建 CountDownLatch,在每個任務中調用 countDown(),并在主線程中調用 await(),代碼冗長、易出錯。

方式二:使用 CompletableFuture

語義上更現代,但仍需創建多個 Future 并組合等待,異常處理較繁瑣。

特性

LatchUtils

CountDownLatch

CompletableFuture

代碼簡潔度

極高

中等

較高

狀態管理

自動

手動

自動

異常處理

內部封裝

開發者處理

多異常需捕獲

學習曲線

關注點分離

優秀

一般

良好

結語:讓并發回歸優雅

在高并發系統中,簡單往往意味著穩定LatchUtils 并不是為了替代 JDK 的并發框架,而是為了在特定場景下,提供一種更符合直覺的方式來管理異步任務。

通過 “多次提交,一次等待”,它讓開發者只需專注于核心業務邏輯,而不必陷入重復的并發控制細節。

無論是微服務聚合調用、批量任務執行,還是后臺數據加載,LatchUtils 都是你 Java 并發工具箱中值得收藏的一件“小而美”的利器。

技術總結:

在并發世界里,最難的不是線程安全,而是保持清晰。 而 LatchUtils 的使命,就是讓異步編程更簡單、更純粹。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-10-15 02:11:00

2022-09-06 11:53:00

開發計算

2010-03-16 08:59:45

Windows 7純凈版安裝

2021-03-06 09:54:22

PythonHTTP請求頭

2015-08-03 14:02:37

Windows 10升級

2020-12-31 13:17:57

手機電腦多屏協同

2023-12-18 08:24:09

LinuxPythonWord

2020-10-20 08:01:30

MySQL密碼Windows

2021-12-13 06:56:46

TCP孤兒連接

2022-01-25 13:00:52

前端設計優化

2021-08-21 23:33:16

iOS蘋果系統

2025-09-01 07:37:44

2025-04-18 09:49:48

2013-07-30 11:24:33

SAP“簡化IT 一招

2021-08-07 07:56:57

Windows 11操作系統微軟

2021-11-22 11:30:37

JavaScript代碼瀏覽器

2018-08-14 05:21:43

路由器網絡運維網絡

2021-01-25 05:41:25

Flash Fliqlo軟件

2021-08-02 05:16:36

IE技巧操作系統
點贊
收藏

51CTO技術棧公眾號

日韩一区二区三区高清| 亚洲熟女乱色一区二区三区| 欧美亚洲第一页| 精品国产一区二区三区久久久蜜月 | 国产欧美高清在线| 国语对白精品一区二区| 久久精品国产69国产精品亚洲| 日本韩国一区| 中文字幕乱码日本亚洲一区二区| 国产卡一卡二在线| 欧美a级一区二区| 欧美日韩高清在线一区| 亚洲成人中文| 国产伦精品一区二区三区视频免费| 99精品网站| 成人黄色中文字幕| 久久精品青草| 成人黄色免费片| 欧美精选视频在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 国产成人tv| 57pao精品| 欧州一区二区| 91网免费观看| 久久亚洲电影| 日本黄网站色大片免费观看| 国产精品中文字幕日韩精品| 天天想你在线观看完整版电影免费 | v888av成人| 亚洲免费在线播放| 在线手机福利影院| 在线观看日韩av先锋影音电影院| 风间由美一区| 欧美精品一区二区三区一线天视频| sdde在线播放一区二区| 亚洲激情六月丁香| 亚洲欧美中文日韩v在线观看| 5252色成人免费视频| 1024av视频| 日韩欧美视频专区| 国产精品妹子av| 九七影院97影院理论片免费| 国产欧美日韩激情| 成人在线免费播放视频| 国产午夜亚洲精品不卡| 黑粗硬长欧美在线视频免费的| 亚洲一区二区黄色| 波多野结衣在线影院| 欧美高清性hdvideosex| 日本不卡1234视频| 欧美人成在线视频| 第一sis亚洲原创| 成人激情视频在线| 欧美一区=区| 国产精品久久久久久久久电影网| 久久网站最新地址| 最新中文字幕在线视频| 欧美videos中文字幕| 国产精品一区三区在线观看| 人妖精品videosex性欧美| 欧美精品一级| 丰满人妻一区二区三区53号| 国产精品麻豆视频| 在线播放日本| 久久最新资源网| 中文在线日韩| www.好吊操| 午夜精品一区二区三区电影天堂| 国产盗摄一区二区| 欧美又大粗又爽又黄大片视频| 亚洲视频观看| 能在线观看的av| 欧美天堂亚洲电影院在线播放| 国产精品白丝久久av网站| 亚洲色图欧洲色图婷婷| 国产欧美欧洲| jizz亚洲女人高潮大叫| 日韩一区二区不卡| bl视频在线免费观看| 亚洲精品久久久一区二区三区| 老司机久久99久久精品播放免费 | 欧美两根一起进3p做受视频| 亚洲欧洲日韩女同| 国精产品一区一区三区mba下载| 国语自产精品视频在线看抢先版图片| 国产一本一道久久香蕉| 麻豆传媒视频在线观看免费| av一区二区三区免费| 欧美日韩免费区域视频在线观看| 国产一区二区区别| 宅男深夜免费观看视频| 97人人香蕉| 色诱亚洲精品久久久久久| av在线亚洲色图| 黄页视频在线免费观看| 97视频人免费观看| 日本高清不卡aⅴ免费网站| 亚洲精品激情| 日韩精品亚洲人成在线观看| 福利视频一区二区三区四区| 欧美激情精品久久久久久免费印度| 国产一区二区调教| 成人在线视频播放| 久久精品国产精品国产精品污 | 快播日韩欧美| 欧美日韩日日骚| 另类小说视频一区二区| 新版的欧美在线视频| 在线观看18视频网站| 国产精品∨欧美精品v日韩精品| 精品夜色国产国偷在线| 久久精品无码一区二区三区| 日韩av电影天堂| 91高清一区| 国产日本亚洲| 毛片网站在线看| 国产91在线亚洲| 国产人妖伪娘一区91| 亚洲天堂视频在线观看| 欧洲一区二区三区在线| 欧美系列亚洲系列| 日韩精品极品视频免费观看| 久久精品色欧美aⅴ一区二区| www.欧美免费| 国产精品视频公开费视频| 精品欧美乱码久久久久久| 欧美亚洲国产一区二区三区va| 欧洲av一区二区嗯嗯嗯啊| 欧美日本精品一区二区三区| 色综合婷婷久久| 911精品国产一区二区在线| 国产黄色成人av| 99免费精品视频| 色婷婷综合五月| 同产精品九九九| 日韩免费成人网| 中文字幕无线精品亚洲乱码一区| 菠萝蜜影院一区二区免费| 日本在线精品视频| 国产区精品视频| 99国产高清| 影音先锋欧美资源| 涩涩视频在线观看免费| 中文字幕在线官网| 欧美精品黄色| 中文字幕一区在线| 欧美极品美女视频网站在线观看免费| 国产日韩三区| 欧美一级黄色录像片| 亚欧在线免费观看| 国产h在线观看| 亚洲18在线| 久久精品国产久精国产| 国产精品久久久久久亚洲伦 | 中文字幕一区二区三区四区五区| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 成人性生交免费看| 国产黄色网页| 在线免费看污| 成人性生交大片免费网站| www成人免费观看| 9191在线播放| 精品成人免费一区二区在线播放| 色尼玛亚洲综合影院| theporn国产在线精品| 亚洲高清影视| 久久国产剧场电影| 亚洲特级片在线| 亚洲高清在线观看| 人人爽久久涩噜噜噜网站| 日本精品免费观看| 欧美日产一区二区三区在线观看| 青青在线视频观看| 日本高清在线观看视频| 中文不卡1区2区3区| 国产精品videosex性欧美| 丝袜美腿亚洲色图| 性做久久久久久| 美女精品久久久| 成人av片网址| av一区二区三区免费观看| 国产免费成人在线| 老司机精品视频在线观看6| 毛片免费在线| 外国成人毛片| 免费在线观看一区二区三区| 亚洲免费av观看| 日韩一区二区三区xxxx| 成人免费在线一区二区三区| 激情小视频网站| 中文字幕中文字幕在线十八区 | 日韩一区欧美| 国产精品网友自拍| 久久久精品久久久| 隔壁人妻偷人bd中字| 国产三级视频在线看| 欧美中文一区| 日本一区二区免费在线| 一本大道久久精品懂色aⅴ| 亚洲韩国欧洲国产日产av|