21:Count Down設計模式

weixin_42868638發表於2020-10-13

1.概述

Count-Down設計模式其實也叫做Latch(閥門)設計模式。當若干個執行緒併發執行完某個特定的任務,然後等到所有的子任務都執行結束之後再統一彙總。

2.JDK自帶CountDownLatch

public static void main(String[] args) throws InterruptedException {
		//設定countdown為5
		CountDownLatch countDownLatch = new CountDownLatch(5);
		System.out.println("執行緒第一階段開始工作");
		
		for(int i=0;i<5;i++) {
			new Thread() {
				@Override
				public void run() {
					try {
						System.out.println(Thread.currentThread().getName());
						Thread.sleep(100);
						//計數器-1
						countDownLatch.countDown();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}.start();
		}
		//直到計數器為0
		countDownLatch.await();
		System.out.println("階段一全部完成,第二階段開工");
	}

列印結果:
執行緒第一階段開始工作
Thread-0
Thread-1
Thread-3
Thread-2
Thread-4
階段一全部完成,第二階段開工

3.自定義CountDownLatch

public class Latch {
	//閥門值
	private final int latchnum;
	
	//計數器
	private int count=0;
	
	
	public Latch(int latchnum) {
		this.latchnum=latchnum;
	}
	
	public void countDown() {
		synchronized (this) {
			this.count++;
			this.notifyAll();
		}
	}
	
	public void await() {
		synchronized (this) {
			if(count!=latchnum) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

相關文章