병렬 프로 그래 밍 의 AQS, Count Downlatch, Cyclic Barrier, Semaphore (9)
4329 단어 병렬 프로 그래 밍
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) {
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
《 나 는 병발 을 모른다 》 너 는 왜 아직도 라인 의 안전 을 모 르 니?1. 스 레 드 안전 이란 무엇 입 니까? 예: 다음 프로그램 은 라인 이 안전 합 니까? 2. 라인 안전 을 해결 하 는 일반적인 수단 자물쇠 (synchronized, volatile, Lock) 대기 열 (패키...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.