CountDownLatch用法

文章徹底是按照本身的理解寫的,若是有什麼不對的地方,請指正....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

相關文章
相關標籤/搜索