文章徹底是按照本身的理解寫的,若是有什麼不對的地方,請指正....java
CountDownLatch能夠讓某一個線程等待,等其餘線程執行完了再執行等待的線程,舉個例子就是:幫女友買面膜是一個線程,買口紅是一個線程,幫本身買一雙鞋是一個線程,CountDownLatch能夠作到買鞋先等待,把面膜和口紅買了再買鞋,這樣應該能夠理解了吧,理解了再看看代碼ide
package com.lujiawei.thread; import java.util.concurrent.CountDownLatch; /** * CountDownLatch用法 * @author jiawei * @version V1.0 * @date 2017年4月9日上午1:10:18 */ public class CountDownLatchTest { public static void main(String[] args) { //初始化一個CountDownLatch,後面2表示須要兩個線程執行完了才能執行等待的線程 CountDownLatch countDownLatch = new CountDownLatch(1); //初始化一個鞋子的線程 Thread shoes = new Thread(new Runnable() { @Override public void run() { try { System.out.println("準備買鞋子了....."); countDownLatch.await(); //等待着女友的東西買完 System.out.println("女友的東西買完了,本身也買了鞋子...."); } catch (Exception e) { e.printStackTrace(); } } }); //初始化一個面膜的線程 Thread mask = new Thread(new Runnable() { @Override public void run() { try { System.out.println("買了面膜啦!!!!"); countDownLatch.countDown(); //告訴countDownLatch已經買了面膜 } catch (Exception e) { e.printStackTrace(); } } }); //初始化一個口紅的線程 Thread lipstick = new Thread(new Runnable() { @Override public void run() { try { System.out.println("買了口紅啦!!!!"); countDownLatch.countDown();//告訴countDownLatch已經買了口紅 } catch (Exception e) { e.printStackTrace(); } } }); //啓動三個線程 shoes.start(); mask.start(); lipstick.start(); } }
以上就是代碼,打印的結果以下線程
買了口紅啦!!!! 準備買鞋子了..... 買了面膜啦!!!! 女友的東西買完了,本身也買了鞋子....
這就是我對CountDownLatch的膚淺用法,你們有什麼疑問,能夠一塊兒討論code