日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

掌握Guava的并發工具:輕松應對復雜并發場景

來源: 責編: 時間:2024-02-01 12:48:58 277觀看
導讀關于Guava的并發工具Guava提供了一些豐富的并發工具,幫助開發者更好地處理并發編程中的問題。例如,Guava提供了ListenableFuture、CountDownLatch、CyclicBarrier等工具。這些工具對Java并發包(java.util.concurrent)進行

關于Guava的并發工具

Guava提供了一些豐富的并發工具,幫助開發者更好地處理并發編程中的問題。例如,Guava提供了ListenableFuture、CountDownLatch、CyclicBarrier等工具。這些工具對Java并發包(java.util.concurrent)進行了擴展,使其功能更強大,使用更方便。gOD28資訊網——每日最新資訊28at.com

具體來說,其中ListenableFuture是Guava對Java Future的擴展,它允許你注冊回調函數,當Future的計算結果可用時,這個回調函數會被執行。CountDownLatch和CyclicBarrier則是用于同步的工具類,它們可以讓一組線程等待彼此,然后再一起執行。gOD28資訊網——每日最新資訊28at.com

Guava的并發工具盤點

Guava提供的并發工具當然不僅僅只有ListenableFuture、CountDownLatch、CyclicBarrier等,還有很多其他的,博主這里算是拋磚引玉吧,把我用過的,我認為比較好用的,在這里給大家梳理總結一下,如果大家用到了其他更好用的,歡迎在評論區告訴,一起深入交流。那么本篇文章的主角就是ListenableFuture、CountDownLatch和CyclicBarrier,那么下面先簡單的盤一下這幾個類的功能特性:gOD28資訊網——每日最新資訊28at.com

  • ListenableFuture:它是Guava對JDK的Future接口的擴展。相比于傳統的Future,ListenableFuture允許你注冊一個回調函數,一旦計算完成,這個回調函數就會被執行。這使得ListenableFuture在處理異步計算的結果時提供了更大的靈活性。
  • CountDownLatch:這是Java中的一個并發工具類,用于協調多個線程之間的同步。CountDownLatch能夠使一個線程等待其他線程完成各自的工作后再執行。例如,你可以使用CountDownLatch來確保在繼續執行主線程之前,一組工作線程已經完成了它們的初始化工作。
  • CyclicBarrier:這是Java中的一個同步工具類。CyclicBarrier可以讓一組線程互相等待,直到所有線程都達到某個狀態后再一起執行。這在并行計算中特別有用,例如,你可能想要在所有線程都完成了它們的一部分計算后,再進行一次匯總操作。CyclicBarrier可以確保所有線程都在同一時間點進行這個匯總操作。

環境配置

目前maven中央倉庫的最新版本是32.1.3-jre,本篇文章的所有示例也是基于這個版本:gOD28資訊網——每日最新資訊28at.com

<dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId>    <version>32.1.3-jre</version></dependency>

Guava的并發工具如何使用

ListenableFuture

Guava類庫的ListenableFuture是一個強大的工具,它擴展了Java的Future接口,增加了注冊回調函數的功能。下面是一個使用Guava的ListenableFuture的示例:gOD28資訊網——每日最新資訊28at.com

public class ListenableFutureExample {    public static void main(String[] args) {        ExecutorService executorService = Executors.newSingleThreadExecutor();        ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(executorService);        ListenableFuture<String> future = listeningExecutorService.submit(new Callable<String>() {            @Override            public String call() throws Exception {                // 模擬異步任務                Thread.sleep(2000);                System.out.println(Thread.currentThread().getName() + ":異步任務執行完畢");                return "異步任務執行成功:success";            }        });        Futures.addCallback(future, new FutureCallback<String>() {            @Override            public void onSuccess(String result) {                // 異步任務執行成功后的回調方法                System.out.println(Thread.currentThread().getName() + ":異步任務執行成功,結果是:" + result);                listeningExecutorService.shutdown();//收到回調結果后,建議關注線程池,否則監聽回調程序會一直阻塞,不會結束;            }            @Override            public void onFailure(Throwable t) {                // 異步任務執行失敗后的回調方法                System.out.println("異步任務執行失敗");                t.printStackTrace();            }        }, executorService);        System.out.println(Thread.currentThread().getName() + ":主線程繼續執行其他任務...");    }}

在上面這個示例中,我們使用了Guava的ListeningExecutorService來創建一個線程池,并通過submit方法提交了一個異步任務。該異步任務模擬了一個耗時操作,等待2秒后返回結果。然后,我們使用Futures.addCallback方法為ListenableFuture對象注冊了一個回調函數。當異步任務執行成功時,會調用onSuccess方法,并打印出異步任務的結果;當異步任務執行失敗時,會調用onFailure方法,并打印出異常信息。最后,主線程繼續執行其他任務。需要注意的是:在這里我關閉了線程池,否則監聽回調程序會一直阻塞,不會結束;gOD28資訊網——每日最新資訊28at.com

CountDownLatchgOD28資訊網——每日最新資訊28at.com

在下面這個示例中,我們使用了Guava類庫的Uninterruptibles.awaitUninterruptibly()方法來等待CountDownLatch的計數器變為0。這與使用Java標準庫中的latch.await()方法類似,但Guava提供的方法能夠更優雅地處理中斷。其余部分與之前的示例相同,創建了多個工作線程,并使用CountDownLatch來協調它們的執行。當所有工作線程都調用latch.countDown()方法后,計數器將變為0,然后主線程通過Uninterruptibles.awaitUninterruptibly(latch)等待所有工作線程執行完畢,并輸出"All worker threads have finished."。gOD28資訊網——每日最新資訊28at.com

public class GuavaCountDownLatchExample {    public static void main(String[] args) {        int numberOfThreads = 3;        CountDownLatch latch = new CountDownLatch(numberOfThreads);        for (int i = 0; i < numberOfThreads; i++) {            new Thread(new Worker(latch), "Thread" + i).start();        }        Uninterruptibles.awaitUninterruptibly(latch); // 使用Guava的Uninterruptibles類等待所有工作線程執行完畢        System.out.println("All worker threads have finished.");    }}class Worker implements Runnable {    private final CountDownLatch latch;    Worker(CountDownLatch latch) {        this.latch = latch;    }    @Override    public void run() {        try {            System.out.println(Thread.currentThread().getName() + " is working.");            Thread.sleep((long) (Math.random() * 1000)); // 模擬工作線程執行的任務            System.out.println(Thread.currentThread().getName() + " has finished.");        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            latch.countDown(); // 工作線程完成任務后,計數器減一        }    }}

CyclicBarrier

在 Guava 類庫中,沒有直接提供 CyclicBarrier 類。CyclicBarrier 是 Java 標準庫中的一個類,它可以用于多線程間的同步。這里也簡單梳理一下他的用法,因為在做多線程間同步協調的相關業務時,CountDownLatch和CyclicBarrier,是兩個繞不過去的選項,這里放在一起也好作個對比。gOD28資訊網——每日最新資訊28at.com

在下面這個示例中,創建了10個工作線程,每個線程都執行相同的任務。這些線程通過CyclicBarrier進行同步,確保所有線程都達到屏障點(即調用cyclicBarrier.await()方法)后再一起繼續執行。當所有線程都調用cyclicBarrier.await()方法后,屏障會被打破,所有線程可以繼續執行后續的任務。在這個示例中,后續的任務是輸出線程名稱和"is running"的消息。gOD28資訊網——每日最新資訊28at.com

public class CyclicBarrierExample {    public static void main(String[] args) {        final int totalThread = 10;        CyclicBarrier cyclicBarrier = new CyclicBarrier(totalThread);        for (int i = 0; i < totalThread; i++) {            new Thread(new Task(cyclicBarrier), "Thread" + i).start();        }    }}class Task implements Runnable {    private CyclicBarrier cyclicBarrier;    public Task(CyclicBarrier cyclicBarrier) {        this.cyclicBarrier = cyclicBarrier;    }    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " is ready");        try {            cyclicBarrier.await(); //等待其他線程到達屏障點        } catch (Exception e) {            e.printStackTrace();        }        System.out.println(Thread.currentThread().getName() + " is running");    }}

寫在最后

希望這篇文章能夠為你提供有關 Guava 的 并發工具類的使用方法,讓你在處理異步任務時能夠更加得心應手gOD28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70425-0.html掌握Guava的并發工具:輕松應對復雜并發場景

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java中如何使用NullPointerException?

下一篇: JS小知識,分享七個高頻的工具函數,也許你用的上

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 三星獲批量產iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續在今年9月舉辦一年一度的秋季新品發布會,有傳言稱發布會將于9月12日舉行,屆時全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美日本不卡| 亚洲精品久久久久| 国产麻豆精品theporn| 亚洲欧美日韩另类| 国产女人精品视频| 国语自产精品视频在线看8查询8| 国产精品区一区| 欧美日韩在线免费视频| 国产欧美日韩在线观看| 欧美日韩午夜剧场| 国产欧美一区二区三区久久| 亚洲黄色成人久久久| 亚洲影院高清在线| 久久久久久久网| 99精品国产在热久久婷婷| 亚洲欧美电影院| 欧美日韩一区在线视频| 亚洲精品一区在线| 在线看无码的免费网站| 快she精品国产999| 亚洲自拍偷拍麻豆| 亚洲国产91| 亚洲高清不卡在线| 亚洲天堂av综合网| 亚洲一区二区三区乱码aⅴ| 99天天综合性| 中文国产成人精品| 亚洲一区尤物| 猛男gaygay欧美视频| 欧美chengren| 欧美日本韩国| 欧美日韩123| 国产真实久久| 1024日韩| 亚洲精品极品| 久久精品综合网| 国产精品va在线播放| 国产精品视频久久久| 亚洲高清在线观看| 亚洲日韩成人| 亚洲一二区在线| 欧美亚洲日本一区| 久久综合激情| 欧美国产欧美综合 | 国产一区二区精品久久| 黄色综合网站| 亚洲精品久久7777| 久久久91精品国产一区二区三区| 国产精品性做久久久久久| 欧美专区亚洲专区| 欧美激情va永久在线播放| 国产精品五区| 午夜亚洲福利在线老司机| 久久全球大尺度高清视频| 国产精品亚洲视频| 欧美日韩亚洲一区二区三区在线| 狠狠色综合一区二区| 在线成人欧美| 欧美一区二区三区免费大片| 欧美天天影院| 国产一区二区久久久| 国内精品久久久久久久97牛牛| 一区免费观看视频| 99热在线精品观看| 欧美成人一区在线| 国产精一区二区三区| 1204国产成人精品视频| 久久成人人人人精品欧| 国产麻豆9l精品三级站| 亚洲一区二区网站| 欧美视频中文字幕在线| 日韩视频永久免费| 久久九九国产精品| 国产精品亚洲综合天堂夜夜| 中国亚洲黄色| 久久中文久久字幕| 欧美日韩免费视频| 狠狠久久婷婷| 欧美专区在线播放| 欧美日韩天堂| 一本色道久久综合亚洲精品高清| 欧美中文字幕视频| 欧美色播在线播放| 在线观看亚洲视频啊啊啊啊| 亚洲欧美精品在线| 国产精品免费视频观看| 亚洲一区免费在线观看| 国产精品久久久一区二区| 亚洲风情亚aⅴ在线发布| 久久婷婷综合激情| 在线免费一区三区| 欧美成人精品激情在线观看| 国产亚洲毛片| 亚洲视频二区| 欧美成人日本| 国产亚洲精品久久久| 久久av二区| 永久免费毛片在线播放不卡| 久久综合中文字幕| 亚洲国产欧美不卡在线观看| 欧美一级久久| 国内精品伊人久久久久av影院 | 久久精品国产亚洲精品| 欧美丝袜第一区| 亚洲在线一区二区| 国产伦精品一区二区三区在线观看 | 极品少妇一区二区三区| 午夜亚洲精品| 国产精品www网站| 欧美一级大片在线观看| 在线播放国产一区中文字幕剧情欧美 | 久久综合九色九九| 欧美亚洲不卡| 一区二区电影免费在线观看| 欧美mv日韩mv国产网站| 99精品欧美一区二区三区| 欧美aⅴ99久久黑人专区| av成人免费在线观看| 国产欧美 在线欧美| 久久一综合视频| 日韩写真视频在线观看| 欧美精品一区二区久久婷婷| 伊人久久久大香线蕉综合直播| 欧美va亚洲va国产综合| 一区二区国产日产| 国产视频不卡| 久久精品国产亚洲一区二区三区| 国产精品一区二区你懂得 | 欧美一区国产一区| 国产精品一区二区久激情瑜伽| 久久精品国产亚洲一区二区三区 | 国产精品自拍网站| 欧美不卡视频| 午夜精品免费在线| 国产欧美日韩一区二区三区在线| 亚洲尤物在线| 一区在线影院| 免费一级欧美片在线观看| 在线精品视频一区二区三四| 另类酷文…触手系列精品集v1小说| 亚洲日本va在线观看| 欧美日本三区| 亚洲一本大道在线| 在线免费不卡视频| 国产精品欧美日韩一区| 小处雏高清一区二区三区 | 欧美四级伦理在线| 久久综合中文色婷婷| 亚洲天堂av电影| 亚洲第一区在线| 国产欧美日韩一区| 欧美日韩美女一区二区| 老司机久久99久久精品播放免费| 亚洲国产三级网| 欧美激情亚洲另类| 国产精品99久久久久久www| 国产精品日韩欧美一区| 欧美大胆成人| 久久精品一本久久99精品| 亚洲天堂激情| 亚洲日本中文字幕区| 一区二区三区在线观看欧美| 欧美第一黄色网| 久久国产精品99国产精| 亚洲一区3d动漫同人无遮挡| 亚洲精品一区二区三区99| 国产精品超碰97尤物18| 女人天堂亚洲aⅴ在线观看| 欧美在线亚洲| 亚洲免费在线看| 夜夜嗨av色综合久久久综合网| 亚洲国产成人午夜在线一区| 国产一区二区成人| 国产精自产拍久久久久久蜜| 国产精品wwwwww| 欧美日韩综合一区| 欧美区视频在线观看| 欧美aⅴ一区二区三区视频| 久久亚洲精品欧美| 一区二区精品在线| 亚洲人成亚洲人成在线观看图片| 一区精品在线| 激情视频一区| 国产自产在线视频一区| 国产精品一区一区| 国产精品免费区二区三区观看| 久久中文在线| 久久精品国产亚洲精品| 宅男在线国产精品| 国产视频在线一区二区| 欧美激情1区2区| 欧美一区激情| 亚洲每日在线| 亚洲精品免费在线| 国内精品一区二区| 国产嫩草影院久久久久| 国产精品私拍pans大尺度在线| 国产精品二区在线| 欧美成人国产va精品日本一级| 久久久久99| 午夜精品视频在线观看一区二区 | 欧美一级欧美一级在线播放| 欧美一区二区精品在线| 一区二区av在线|