병렬 프로 그래 밍 의 AQS, Count Downlatch, Cyclic Barrier, Semaphore (9)

목차
1. AQS (AbstractQueuedSynchronizer) 추상 큐 동기 화 장치
2. 자바 병렬 프로 그래 밍 에 자주 사용 되 는 클래스
1. CountDownlatch (카운터) - 다 갔다 와 서 밥 먹 기
2. Cyclic Barrier (장벽) - 다 왔어요. 밥 먹고 있어 요.
3. Semaphore (신 호 량 계산) - 방 에 서 는 언제든지 지 정 된 인원 (예 를 들 어 5 명) 만 밥 을 먹 을 수 있 습 니 다.
 
1. AQS (AbstractQueuedSynchronizer) 추상 큐 동기 화 장치
https://www.cnblogs.com/iou123lg/p/9464385.html
https://blog.csdn.net/zhangdong2012/article/details/79983404
2. 자바 병렬 프로 그래 밍 에 자주 사용 되 는 클래스
원문:https://www.cnblogs.com/dolphin0520/p/3920397.html
 
1. CountDownlatch (카운터) - 다 갔다 와 서 밥 먹 기
Countdown Latch 클래스 는 java. util. concurrent 패키지 에 있 으 며, 이 를 이용 하여 유사 한 계수기 의 기능 을 실현 할 수 있 습 니 다.예 를 들 어 하나의 미 션 A 가 있 는데 다른 4 개의 미 션 이 실 행 된 후에 야 실 행 될 수 있 습 니 다. 이때 Count Downlatch 를 이용 하여 이런 기능 을 실현 할 수 있 습 니 다.Countdown Latch 는 하나의 계수 기 를 통 해 이 루어 집 니 다. 계수기 의 초기 값 은 스 레 드 의 수량 입 니 다.한 라인 이 자신의 임 무 를 완성 할 때마다 계수기 의 값 은 1 로 줄어든다.카운터 값 이 0 에 도 착 했 을 때 모든 스 레 드 가 작업 을 완 료 했 음 을 나타 내 고 잠 금 상태 에서 기다 리 는 스 레 드 는 작업 을 다시 수행 할 수 있 습 니 다.
	public static void main(String[] args) throws InterruptedException {
		CountDownLatch countDownLatch = new CountDownLatch(2);
		new Thread(new Runnable() {

			@Override
			public void run() {
				System.out.println(Thread.currentThread().getName() + ",       ...");
				countDownLatch.countDown();
				System.out.println(Thread.currentThread().getName() + ",       ...");
			}
		}).start();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				System.out.println(Thread.currentThread().getName() + ",       ...");
				countDownLatch.countDown();//        1
				System.out.println(Thread.currentThread().getName() + ",       ...");
			}
		}).start();
		countDownLatch.await();//    0,        
	    System.out.println("         ....");
	    System.out.println("       .....");
	    for (int i = 0; i <10; i++) {
			System.out.println("main,i:"+i);
		}
	}

 
2. Cyclic Barrier (장벽) - 다 왔어요. 밥 먹고 있어 요.
CyclicBarrier 를 초기 화 할 때 하나의 수 를 정 한 다음 CyclicBarrier. await () 를 호출 하여 기다 리 는 스 레 드 수 를 계산 합 니 다.스 레 드 수가 이 숫자 에 이 르 렀 을 때 대기 상태 에 들 어간 모든 스 레 드 가 깨 어 나 계속 되 었 습 니 다.
Cyclic Barrier 는 이름 의 뜻 처럼 장애 로 볼 수 있 습 니 다. 모든 스 레 드 가 다 도착 해 야 이 장 애 를 함께 통과 할 수 있 습 니 다.
Cyclicbarrier 는 처음에 Runnable 의 인 자 를 가 져 올 수 있 습 니 다. 이 Runnable 작업 은 Cyclicbarrier 의 수량 이 달성 되면 모든 다른 스 레 드 가 깨 어 나 기 전에 실 행 됩 니 다.
class Writer extends Thread {
	private CyclicBarrier cyclicBarrier;
	public Writer(CyclicBarrier cyclicBarrier){
		 this.cyclicBarrier=cyclicBarrier;
	}
	@Override
	public void run() {
		System.out.println("  " + Thread.currentThread().getName() + ",      ");
		try {
			Thread.sleep(3000);
		} catch (Exception e) {
			// TODO: handle exception
		}
		System.out.println("  " + Thread.currentThread().getName() + ",      .....");
		
		try {
			cyclicBarrier.await();
		} catch (Exception e) {
		}
		System.out.println("        ..........");
	}

}

public class Test001 {

	public static void main(String[] args) {
		CyclicBarrier cyclicBarrier=new CyclicBarrier(5);
		for (int i = 0; i < 5; i++) {
			Writer writer = new Writer(cyclicBarrier);
			writer.start();
		}
	}

}

 
3. Semaphore (신 호 량 계산) - 방 에 서 는 언제든지 지 정 된 인원 (예 를 들 어 5 명) 만 밥 을 먹 을 수 있 습 니 다.
Semaphore 는 계수 에 기초 한 신 호 량 이다.이 는 하나의 한도 값 을 설정 할 수 있 습 니 다. 이 를 바탕 으로 여러 스 레 드 경쟁 에서 허가 신 호 를 받 고 자신의 신청 을 한 후에 반환 할 수 있 습 니 다. 한도 값 을 초과 하면 스 레 드 신청 허가 신 호 는 막 힐 것 입 니 다.Semaphore 는 일부 대상 탱크, 자원 탱크 등 을 구축 하 는 데 사용 할 수 있다. 예 를 들 어 데이터베이스 연결 탱크 등 이다. 우 리 는 계수 가 1 인 Semaphore 를 만 들 고 이 를 상호 배척 자물쇠 와 유사 한 메커니즘 으로 할 수 있다. 이것 은 이원 신 호 량 이 라 고도 하 는데 두 가지 상호 배척 상 태 를 나타 낸다.그것 의 용법 은 다음 과 같다.
availablePermits 함 수 는 현재 사용 가능 한 자원 수 를 가 져 오 는 데 사 용 됩 니 다.
wc.acquire(); //자원 신청
wc.release();// 자원 방출
//          5        
    	//   5         
    	Semaphore semp = new Semaphore(5);  
    	  
    	try {  
    	    //       
    	    semp.acquire();  
    	    try {  
    	        //       
    	    } catch (Exception e) {  
    	  
    	    } finally {  
    	        //       
    	        semp.release();  
    	    }  
    	} catch (InterruptedException e) {  
    	  
    	}  

 

좋은 웹페이지 즐겨찾기