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

Java CountDownLatch完成異步回調(diào)實(shí)例詳解

 更新時(shí)間:2017年03月22日 14:43:22   投稿:lqh  
這篇文章主要介紹了Java CountDownLatch完成異步回調(diào)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

Java CountDownLatch完成異步回調(diào)實(shí)例詳解

實(shí)例代碼:

public class AsyncDemo {

  private static void doSomeTask() {
    System.out.println("Hello World");
  }

  private static void onCompletion() {
    System.out.println("All tasks finished");
  }

  public static void main(String[] args) {
    ExecutorService executor = Executors.newCachedThreadPool();
    final CountDownLatch latch = new CountDownLatch(2);

    executor.execute(new Task(latch));
    executor.execute(new Task(latch));

    executor.execute(() -> {
      try {
        latch.await();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      onCompletion();
    });
    executor.shutdown();
  }

  private static class Task implements Runnable {

    /**
     * CountDownLatch 是JDK提供的一個簡單的線程監(jiān)測工具
     * 基于簡單的計(jì)數(shù),調(diào)用countDown()方法表明當(dāng)前線程已經(jīng)終止
     * 在監(jiān)測線程中調(diào)用await()方法,該方法會一直掛起直到所有其它線程終止
     */
    private final CountDownLatch latch;

    public Task(CountDownLatch latch) {
      this.latch = latch;
    }

    @Override
    public void run() {
      try {
        doSomeTask();
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        latch.countDown();
      }
    }
  }
}

這里有兩點(diǎn)需要補(bǔ)充:

1.如果你是用main方法啟動的線程,這種調(diào)用方法是沒有問題的,JDK會確保所有線程都終止以后main方法才退出。但是如果main方法不是異步任務(wù)的啟動者(如JUnit,Spring,Tomcat),一旦啟動之后laucher將會失去對線程的控制。如在JUnit中l(wèi)aucher提交完任務(wù)后就會被認(rèn)為所有過程已完成,其它線程會被強(qiáng)行終止。

2.正因?yàn)槿绱耍埜鶕?jù)環(huán)境使用正確的Executor。比如,在web環(huán)境中,應(yīng)該選用tomcat(或Spring)管理的線程池作為Executor,這樣才能確保web應(yīng)用對于異步任務(wù)的整個生命周期具有控制權(quán);如果你選用JDK的線程池有什么后果呢?任務(wù)也許可以正常執(zhí)行,當(dāng)一旦你終止web-app,正在執(zhí)行的異步線程并不會被正常kill掉,并由此造成內(nèi)存泄漏或其它不可預(yù)見的后果。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • java參數(shù)傳值代碼舉例

    java參數(shù)傳值代碼舉例

    在編程中往方法中傳遞參數(shù)的方法往往有兩種,一種是值傳遞,一種是引用傳遞,而在java中所有的參數(shù)傳遞全部都是值傳遞,這篇文章主要給大家介紹了關(guān)于java參數(shù)傳值的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?

    java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο螅?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Java實(shí)現(xiàn)產(chǎn)生隨機(jī)字符串主鍵的UUID工具類

    Java實(shí)現(xiàn)產(chǎn)生隨機(jī)字符串主鍵的UUID工具類

    這篇文章主要介紹了Java實(shí)現(xiàn)產(chǎn)生隨機(jī)字符串主鍵的UUID工具類,涉及java隨機(jī)數(shù)與字符串遍歷、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • SpringBoot向容器注冊bean的方法詳解

    SpringBoot向容器注冊bean的方法詳解

    這篇文章主要利用示例為大家詳細(xì)介紹了SpringBoot如何向容器注冊bean(即:將對象加入容器)的四種方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • Java獲取隨機(jī)數(shù)的3種方法

    Java獲取隨機(jī)數(shù)的3種方法

    本篇文章主要介紹了Java獲取隨機(jī)數(shù)的3種方法,現(xiàn)在分享給大家,也給大家做個參考,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 使用maven war包打包去除jar包瘦身

    使用maven war包打包去除jar包瘦身

    這篇文章主要介紹了使用maven war包打包去除jar包瘦身操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java實(shí)現(xiàn)單人版五子棋游戲

    java實(shí)現(xiàn)單人版五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)五子棋小游戲的相關(guān)資料,十分簡單實(shí)用,有不錯的參考借鑒價(jià)值,推薦給大家,需要的朋友可以參考下
    2016-02-02
  • java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列示例介紹

    java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列示例介紹

    大家好,本篇文章主要講的是java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列示例介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    Linux中Java開發(fā)常用軟件安裝方法總結(jié)

    這篇文章主要介紹了Linux中Java開發(fā)常用軟件安裝方法總結(jié),需要的朋友可以參考下
    2020-02-02
  • Flowable整合SpringBoot實(shí)現(xiàn)的示例代碼

    Flowable整合SpringBoot實(shí)現(xiàn)的示例代碼

    本文詳細(xì)介紹了如何在SpringBoot項(xiàng)目中整合Flowable進(jìn)行工作流管理,包括依賴引入、流程部署與啟動、表結(jié)構(gòu)、流程掛起和激活以及任務(wù)分配等關(guān)鍵操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09

最新評論