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

Java中CountDownLatch用法解析

 更新時間:2017年01月14日 13:05:37   作者:Java開發(fā)-擱淺  
這篇文章主要為大家詳細介紹了Java中CountDownLatch用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

CountDownLatch類是一個同步計數(shù)器,構(gòu)造時傳入int參數(shù),該參數(shù)就是計數(shù)器的初始值,每調(diào)用一次countDown()方法,計數(shù)器減1,計數(shù)器大于0 時,await()方法會阻塞程序繼續(xù)執(zhí)行

CountDownLatch如其所寫,是一個倒計數(shù)的鎖存器,當計數(shù)減至0時觸發(fā)特定的事件。利用這種特性,可以讓主線程等待子線程的結(jié)束。下面以一個模擬運動員比賽的例子加以說明。

 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 public class CountDownLatchDemo {
   private static final int PLAYER_AMOUNT = 5;
   public CountDownLatchDemo() {
     // TODO Auto-generated constructor stub  
   }
   /**
   * @param args
   */
   public static void main(String[] args) {
     // TODO Auto-generated method stub
     //對于每位運動員,CountDownLatch減1后即結(jié)束比賽
     CountDownLatch begin = new CountDownLatch(1);
     //對于整個比賽,所有運動員結(jié)束后才算結(jié)束
     CountDownLatch end = new CountDownLatch(PLAYER_AMOUNT);
     Player[] plays = new Player[PLAYER_AMOUNT];
     
     for(int i=0;i<PLAYER_AMOUNT;i++)
       plays[i] = new Player(i+1,begin,end);
     
     //設置特定的線程池,大小為5
     ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);
     for(Player p:plays)
       exe.execute(p);      //分配線程
     System.out.println("Race begins!");
     begin.countDown();
     try{
       end.await();      //等待end狀態(tài)變?yōu)?,即為比賽結(jié)束
     }catch (InterruptedException e) {
       // TODO: handle exception
       e.printStackTrace();
     }finally{
       System.out.println("Race ends!");
     }
     exe.shutdown();
   }
 }

接下來是Player類

import java.util.concurrent.CountDownLatch;
 
 
 public class Player implements Runnable {
 
   private int id;
   private CountDownLatch begin;
   private CountDownLatch end;
   public Player(int i, CountDownLatch begin, CountDownLatch end) {
     // TODO Auto-generated constructor stub
     super();
     this.id = i;
     this.begin = begin;
     this.end = end;
   }
 
   @Override
   public void run() {
     // TODO Auto-generated method stub
     try{
       begin.await();    //等待begin的狀態(tài)為0
       Thread.sleep((long)(Math.random()*100));  //隨機分配時間,即運動員完成時間
       System.out.println("Play"+id+" arrived.");
     }catch (InterruptedException e) {
       // TODO: handle exception
       e.printStackTrace();
     }finally{
       end.countDown();  //使end狀態(tài)減1,最終減至0
     }
   }
 }

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點

    java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點

    這篇文章主要介紹了java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點,需要的朋友可以參考下
    2014-02-02
  • 關(guān)于rocketmq中日志文件路徑的配置指南

    關(guān)于rocketmq中日志文件路徑的配置指南

    rocketmq是java編寫的,也就是可以指定啟動參數(shù),下面這篇文章主要給大家介紹了關(guān)于rocketmq中日志文件路徑的配置指南,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • IDEA中如何引入spring的命名空間

    IDEA中如何引入spring的命名空間

    這篇文章主要介紹了IDEA中如何引入spring的命名空間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 深入理解java虛擬機的故障處理工具

    深入理解java虛擬機的故障處理工具

    大家都知道在給系統(tǒng)定位問題的時候,知識、經(jīng)驗是關(guān)鍵基礎,數(shù)據(jù)是依據(jù),工具是運用知識處理數(shù)據(jù)的手段。Java開發(fā)人員可以在jdk安裝的bin目錄下找到除了java,javac以外的其他命令。這些命令主要是一些用于監(jiān)視虛擬機和故障處理的工具,下面來看看詳細的介紹。
    2016-11-11
  • spring-boot整合dubbo:Spring-boot-dubbo-starter

    spring-boot整合dubbo:Spring-boot-dubbo-starter

    這篇文章主要介紹了spring-boot整合dubbo:Spring-boot-dubbo-starter的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • SpringBoot項目打jar包與war包的詳細步驟

    SpringBoot項目打jar包與war包的詳細步驟

    SpringBoot和我們之前學習的web應用程序不一樣,其本質(zhì)上是一個 Java應用程序,那么又如何部署呢?這篇文章主要給大家介紹了關(guān)于SpringBoot項目打jar包與war包的詳細步驟,需要的朋友可以參考下
    2023-02-02
  • Java之Default關(guān)鍵字的兩種使用方式

    Java之Default關(guān)鍵字的兩種使用方式

    Java關(guān)鍵字default主要有兩種使用場景:一是在switch語句中作為默認執(zhí)行的分支;二是在接口中定義默認方法,這是Java 8新增的特性,允許接口包含具體實現(xiàn)的方法,在switch中,當沒有匹配的case時,執(zhí)行default分支
    2024-09-09
  • java web如何解決瞬間高并發(fā)

    java web如何解決瞬間高并發(fā)

    這篇文章主要為大家詳細介紹了java web解決瞬間高并發(fā)的策略,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Eclipse中導出碼云上的項目方法(圖文教程)

    Eclipse中導出碼云上的項目方法(圖文教程)

    下面小編就為大家?guī)硪黄狤clipse中導出碼云上的項目方法(圖文教程)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • JAVA模擬多線程給多用戶發(fā)送短信

    JAVA模擬多線程給多用戶發(fā)送短信

    這篇文章主要介紹了JAVA模擬多線程給多用戶發(fā)送短信,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論