CyclicBarrier用法

文章徹底是按照本身的理解寫的,若是有什麼不對的地方,請指正....java

CyclicBarrier能夠讓幾個線程準備好,等所有線程準備好了,再一塊兒執行。舉個例子,張3、李4、王五約好一塊兒吃飯,只有三我的到期了纔開始吃,這個例子自認爲舉得不錯,給本身一點掌聲,下面請看代碼ide

package com.lujiawei.thread;

import java.util.concurrent.CyclicBarrier;

/**
 * CyclicBarrier用法
 * @author   jiawei
 * @version  V1.0
 * @date     2017年4月9日上午1:11:07
 */
public class CyclicBarrierTest {

	public static void main(String[] args) {
		
		//初始化一個CyclicBarrier,後面3表示須要三個線程準備好了才能進行一塊兒執行
		CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
		
		Thread zhangsan = new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("張三準備到了,準備吃飯....");
					cyclicBarrier.await();   //等待其餘線程準備好
					System.out.println("張三開吃");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
		Thread lisi = new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("李四到了,準備吃飯....");
					cyclicBarrier.await();   //等待其餘線程準備好
					System.out.println("李四開吃");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
		Thread wangwu = new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("王五到了,準備吃飯....");
					cyclicBarrier.await();
					System.out.println("王五開吃");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
		zhangsan.start();
		lisi.start();
		wangwu.start();
		
	}
}

 

看下打印的結果線程

 

李四到了,準備吃飯....
王五到了,準備吃飯....
張三準備到了,準備吃飯....
張三開吃
王五開吃
李四開吃
相關文章
相關標籤/搜索