1. 程式人生 > >java 利用countdownlatch模擬高併發情況

java 利用countdownlatch模擬高併發情況

一、簡介

CountDownLatch 是 java.util.concurrent 包下的一個同步輔助類,它能使一個或多個執行緒在其他的執行緒的一系列操作完成之前一直等待,初始化值為計數器大小(即執行緒數量)。

二、主要方法

countDown方法,當前執行緒呼叫此方法,則計數減一。
await方法,呼叫此方法會一直阻塞當前執行緒,直到計時器的值為0。

三、實現demo

測試執行緒

import java.util.concurrent.CountDownLatch;

public class MyThread implements Runnable {
	private final CountDownLatch startSignal;
	public MyTestThread(CountDownLatch startSignal) {
		super();
		this.startSignal = startSignal;
	}
	@Override
	public void run() {
		try {
			startSignal.await(); 
			//一直阻塞當前執行緒,直到計時器的值為0
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//實際測試操作
		doWork();
	}
	private void doWork() {
	// TODO Auto-generated method stub
	System.out.println("do work");
	}
}

測試主方法

public class MyTest {
	public static void main(String[] args) {
		// 初始化計數器為 1
		CountDownLatch start=new CountDownLatch(1);
		//模擬16個執行緒
		for(int i=0;i<16;i++){
			MyTestThread tt =new MyTestThread(start);
			Thread t = new Thread(tt);
			t.start();
		}
		//計數器減 1
		start.countDown();
		//計數器為0,所有執行緒釋放,同時