成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何進(jìn)行并發(fā)工具類CountDownLatch與CyclicBarrier分析

如何進(jìn)行并發(fā)工具類CountDownLatch與CyclicBarrier分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司自2013年起,先為黃陂等服務(wù)建站,黃陂等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為黃陂企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

CountDownLatch

基本的流程是一個(gè)線程等待其他的線程完成工作以后再執(zhí)行,加強(qiáng)版join

類的主要方法,await用來(lái)等待,countDown(在線程里面)用來(lái)減一。

      由初始化線程決定是否放行。

我們來(lái)用代碼演示下CountDownLatch的基本使用:

public class UserCountDownLatch {  static CountDownLatch latch = new CountDownLatch(6);  //初始化線程  private static class InitThread implements Runnable{    @Override    public void run() {      System.out.println("Thread_"+Thread.currentThread().getId()+" ready init work ...");      latch.countDown();//初始化線程完成工作了??垡淮?/code>    }  }  public static void main(String[] args) throws InterruptedException {    //單獨(dú)的初始化線程,初始化分為2步,需扣減兩次    new Thread(new Runnable() {      @Override      public void run() {        try {          Thread.sleep(1000);          System.out.println("Thread_"+Thread.currentThread().getId()              +" ready init work step lst.....");          latch.countDown();//每完成一步工作,就扣減一次          System.out.println("begin step 2nd......");          Thread.sleep(1000);          System.out.println("Thread_"+Thread.currentThread().getId()              +" ready init work step 2nd.....");          latch.countDown();//每完成一步工作,就扣減一次        } catch (InterruptedException e) {          // TODO Auto-generated catch block          e.printStackTrace();        }
     }    }).start();    for(int i=0;i<=3;i++){      Thread thread = new Thread(new InitThread());      thread.start();    }    latch.await();    System.out.println("Main do ites work ....");  }}

 結(jié)果:

Thread_14 ready init work ...Thread_12 ready init work ...Thread_11 ready init work ...Thread_13 ready init work ...Thread_10 ready init work step lst.....begin step 2nd......Thread_10 ready init work step 2nd.....Main do ites work ....

小結(jié):就必須等到countDown減完才開(kāi)始執(zhí)行main方法后面的程序。

CyclicBarrier

讓一組線程達(dá)到某個(gè)屏障,被阻塞,一直到組內(nèi)最后一個(gè)線程達(dá)到屏障時(shí),屏障開(kāi)放,所有被阻塞的線程會(huì)繼續(xù)運(yùn)行。

      由工作線程決定是否運(yùn)行。

我們來(lái)用代碼演示下CyclicBarrier的基本使用:

public class UseCyclicBarrier {  private static CyclicBarrier barrier =       new CyclicBarrier(5,new CollectThread());//屏障開(kāi)放后,CollectThread()就會(huì)執(zhí)行.    private static ConcurrentHashMap<String, Long> resultMap =       new ConcurrentHashMap<String, Long>();//存放子線程工作結(jié)果的容器    public static void main(String[] args){    for(int i=0;i<=4;i++){      Thread thread = new Thread(new SubThread());      thread.start();    }  }  //負(fù)責(zé)屏障開(kāi)放以后的工作  private static class CollectThread implements Runnable{    @Override    public void run() {      StringBuilder result = new StringBuilder();      for(Map.Entry<String, Long> workResult:resultMap.entrySet()){        result.append("["+workResult.getValue()+"]");      }            System.out.println("the result = "+result);      System.out.println("do other business......");    }    }  //工作線程  private static class SubThread implements Runnable{    @Override    public void run() {      long id = Thread.currentThread().getId();      resultMap.put(Thread.currentThread().getId()+"", id);      Random r = new Random();//隨機(jī)決定工作線程的是否睡眠      try{        if(r.nextBoolean()){            Thread.sleep(2000+id);            System.out.println("Thread_"+id+".....do its business ");          }          System.out.println(id+".....is await");          barrier.await();//          Thread.sleep(1000+id);          System.out.println("Thread_"+id+".....do its business ");        }catch(Exception e){          e.printStackTrace();        }      }    }  }

小結(jié):在初始化的時(shí)候,開(kāi)放屏障后,可以使用指定執(zhí)行的線程。

CyclicBarrier(int parties,RunnablebarrierAction)

不同在于動(dòng)作的實(shí)施者是不同的,CountDownLatch的下一步動(dòng)作實(shí)施者是main函數(shù),而CyclicBarrier下一步的動(dòng)作實(shí)施者可以為其他線程。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

當(dāng)前名稱:如何進(jìn)行并發(fā)工具類CountDownLatch與CyclicBarrier分析
文章來(lái)源:http://jinyejixie.com/article46/gpeceg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、軟件開(kāi)發(fā)自適應(yīng)網(wǎng)站、用戶體驗(yàn)、搜索引擎優(yōu)化移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

崇文区| 蓝山县| 金平| 化州市| 山阴县| 天台县| 恩平市| 博白县| 芦溪县| 吉林市| 阿拉尔市| 石城县| 曲阜市| 肃宁县| 长武县| 梅河口市| 休宁县| 惠水县| 辽阳市| 弥渡县| 昌图县| 虹口区| 修文县| 沙雅县| 霍邱县| 金堂县| 于田县| 满城县| 淮安市| 土默特左旗| 庆城县| 平山县| 抚顺县| 秦皇岛市| 仙游县| 资兴市| 电白县| 陆川县| 濮阳县| 文登市| 江都市|