자바 다 중 스 레 드 구성 요소 1:CountDownlatch 사용 방법 에 대한 요약

자료 와 연습 시간 에 대한 정리 에 따 르 면 Count Downlatch 가 하 는 일 은 하나의 카운터 에 대한 통 제 를 통 해 한 동작 을 수행 하고 이 카운터 의 값 이 다 중 스 레 드 사이 에서 공유 하 는 유효성 을 동기 화 하 는 것 이다.
다음은 이 점 을 설명 할 수 있 는 간단 한 예 가 있다.
public class CountDownLatchDemo {
	public static void main(String[] args) {
		/*
		 * CountDownLatch's parameter will decide whether to print waiting
		 * information 
                  * if parameter >10 will never can't to execute finished information
                  * if parameter==0 , don't need to waiting call working()
		 */
		//in think in java construct parameter is 100, will lead to never print waiting finished information
		CountDownLatch latch = new CountDownLatch(10);
		ExecutorService es = Executors.newCachedThreadPool();
		for (int i = 0; i < 10; i++) {
			es.execute(new WaitingTask(latch));
		}
		for (int i = 0; i < 10; i++) {
			es.execute(new WokingTask(latch));
		}
		es.shutdown();
		System.out.println("Existing");
	}
}

class WokingTask implements Runnable {
	private static int	         count	= 0;
	private int	                 id	   = count++;
	private final CountDownLatch	latch;
	
	public WokingTask(CountDownLatch latch) {
		this.latch = latch;
		
	}
	
	public String toString() {
		return "working:" + id;
	}
	
	public void run() {
		try {
			working();
			latch.countDown();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	
	public void working() {
		System.out.println(this + "working");
		try {
			TimeUnit.MILLISECONDS.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class WaitingTask implements Runnable {
	private static int	         count	= 0;
	private int	                 id	   = count++;
	private final CountDownLatch	latch;
	
	public WaitingTask(CountDownLatch latch) {
		this.latch = latch;
	}
	
	public String toString() {
		return "waiting:" + id;
	}
	
	public void run() {
		try {
			latch.await();
			System.out.println(this + " waiting finished....");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

좋은 웹페이지 즐겨찾기