자바 및 패키지 3 개 실 용적 인 병렬 스 레 드 보조 클래스
그리고 다음 세 가지 방법 은 CountDownlatch 클래스 에서 가장 중요 한 방법 입 니 다:Public void await()throws Interrupted Exception{};/await()방법 을 호출 하 는 스 레 드 가 걸 립 니 다.count 값 이 0 이 될 때 까지 기다 리 고 있 습 니 다.Public boolean await(long timeout,TimeUnit unit)throws Interrupted Exception{};/await()와 유사 합 니 다.일정 시간 을 기다 린 후에 count 값 이 0 으로 변 하지 않 으 면 Public void countDown(){}을 계속 실행 합 니 다./count 값 을 1 감소
public class countDownlatch{/예 를 들 어 하나의 퀘 스 트 A 가 있 습 니 다.다른 4 개의 퀘 스 트 가 실 행 된 후에 야 Public static void main(String[]args){/**4 가 퀘 스 트 수 보다 많 으 면 2 개의 퀘 스 트 를 수행 한 후에 도 깨 어 날 때 까지 기 다 립 니 다.1 이 퀘 스 트 수 보다 작 으 면 2 개의 퀘 스 트 를 수행 합 니 다.*/final CountDownLatch latch = new CountDownLatch(2);
// 1
new Thread() {
@Override
public void run() {
try {
System.out.println(" " + Thread.currentThread().getName() + " ");
Thread.sleep(3000);
System.out.println(" " + Thread.currentThread().getName() + " ");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
// 2
new Thread() {
@Override
public void run() {
try {
System.out.println(" " + Thread.currentThread().getName() + " ");
Thread.sleep(3000);
System.out.println(" " + Thread.currentThread().getName() + " ");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
try {
System.out.println(" 2 ...");
latch.await();// await() , count 0
System.out.println("2 ");
System.out.println(" ");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
2.Cyclic Barrier 용법 은 이 를 통 해 한 스 레 드 를 특정한 상태 로 기다 린 후에 모두 동시에 실행 할 수 있 습 니 다.리 턴 이 라 고 하 는 것 은 모든 대기 스 레 드 가 풀 려 난 후에 Cyclic Barrier 가 다시 사용 할 수 있 기 때 문 입 니 다.우 리 는 잠시 이 상 태 를 barrier 라 고 부 릅 니 다.await()방법 을 호출 한 후에 스 레 드 는 barrier 에 있 습 니 다.CyclicBarrier 는 2 개의 구조 기 를 제공 합 니 다:Public CyclicBarrier(int parties,Runnable barrier Action){}
public CyclicBarrier(int parties){}매개 변수 parties 는 몇 개의 스 레 드 나 작업 을 barrier 상태 로 기다 리 게 하 는 지 말 합 니 다.매개 변수 barrierAction 은 이 스 레 드 가 barrier 상태 에 이 르 렀 을 때 실 행 될 내용 입 니 다.
그리고 Cyclic Barrier 에서 가장 중요 한 방법 은 await 방법 입 니 다.2 개의 리 셋 버 전이 있 습 니 다.Public int await()throws Interrupted Exception,BrokenBarrier Exception{};public int await(long timeout, TimeUnit unit)throws InterruptedException,BrokenBarrierException,TimeoutException { }; 첫 번 째 버 전 은 현재 스 레 드 를 걸 고 모든 스 레 드 가 barrier 상태 에 도달 할 때 까지 후속 작업 을 수행 하 는 데 자주 사용 합 니 다.
두 번 째 버 전 은 이 스 레 드 를 일정한 시간 까지 기다 리 게 하 는 것 입 니 다.만약 에 스 레 드 가 barrier 상태 에 도착 하지 않 으 면 barrier 에 도착 하 는 스 레 드 로 하여 금 후속 임 무 를 수행 하 게 합 니 다.
package com.ky.kafka;
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException;
/**
4.567917.모든 기록 스 레 드 가 데 이 터 를 작성 하 는 작업 을 마 친 후에 다른 스 레 드 가 기록 되 기 를 기다 리 고 있 습 니 다
Semaphore 용법:Semaphore 는 신 호 량 이라는 뜻 으로 번역 되 었 습 니 다.Semaphore 는 동시에 접근 하 는 라인 개 수 를 제어 할 수 있 습 니 다.acquire()를 통 해 허 가 를 받 을 수 있 습 니 다.없 으 면 기다 리 고 release()는 허 가 를 내 립 니 다.public Semaphore(int permits){/매개 변수 permits 는 허가 수 를 표시 합 니 다.동기 화=new NonfairSync(permits)에 접근 할 수 있 는 스 레 드 를 동시에 허용 합 니 다.}public Semaphore(int permits,boolean fair){//이것 은 공평 한 지 아 닌 지 를 나타 내 는 인자 fair 가 하나 더 있 습 니 다.즉,오래 기다 릴 수록 허가 sync=(fair)를 먼저 받 습 니까?new FairSync(permits) : new NonfairSync(permits); }
다음은 Semaphore 클래스 에서 중요 한 몇 가지 방법 을 말씀 드 리 겠 습 니 다.우선 acquire(),release()방법:public void acquire()throws Interrupted Exception{}/허 가 를 받 은 public void acquire(int permits)throws Interrupted Exception{}/허 가 를 받 은 public void release(){}/허 가 를 받 은 public void release(int permits){}//허 가 를 받 은 permits 개 허가
acquire()는 허 가 를 받 는 데 사용 되 며,허가 없 이 얻 을 수 있다 면 허 가 를 받 을 때 까지 기다 릴 것 입 니 다.release()는 허 가 를 석방 하 는 데 쓰 인 다.석방 허 가 를 받 기 전에 먼저 허 가 를 받 아야 함 을 주의 하 세 요.이 네 가지 방법 은 모두 막 힐 수 있 으 며,즉시 실행 결 과 를 얻 으 려 면 다음 과 같은 몇 가지 방법 을 사용 할 수 있다.
public boolean tryAcquire() { }; //허 가 를 받 으 려 고 시도 합 니 다.성공 하면 즉시 true 로 돌아 갑 니 다.실패 하면 false Public boolean try Acquire(long timeout,TimeUnit unit)throws Interrupted Exception{};/허 가 를 받 으 려 고 시도 합 니 다.지정 한 시간 안에 성공 하면 즉시 true 로 돌아 갑 니 다.그렇지 않 으 면 false Public boolean try Acquire(int permits){}로 돌아 갑 니 다./permits 허 가 를 받 으 려 고 시도 합 니 다.성공 하면 즉시 true 로 돌아 갑 니 다.실패 하면 false Public boolean try Acquire(int permits,long timeout,TimeUnit unit)throws Interrupted Exception{};/permits 허 가 를 받 으 려 고 시도 합 니 다.지정 한 시간 안에 성공 하면 즉시 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
또한 availablePermits()방법 을 통 해 사용 가능 한 허가 수 를 얻 을 수 있다.
package com.ky.kafka;
import java.util.concurrent.Semaphore;
/**
4.567917.만약 에 한 공장 에 5 대의 기계 가 있 지만 8 명의 노동자 가 있 고 한 대의 기 계 는 한 명의 노동자 만 사용 할 수 있 으 며 다 사용 해 야 다른 노동자 들 이 계속 사용 할 수 있다.그러면 우 리 는 Semaphore 를 통 해 실현 할 수 있다
public Worker(Semaphore semaphore) {
this.semaphore = semaphore;
}
@Override
public void run() {
try {
semaphore.acquire();//
System.out.println(" ...");
Thread.sleep(2000);
System.out.println(" ");
semaphore.release();//
System.out.println(semaphore.availablePermits());//
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} } 4.위의 세 가지 보조 류 를 정리 합 니 다.1)Count Downlatch 와 Cyclic Barrier 는 모두 스 레 드 간 의 기다 림 을 실현 할 수 있 습 니 다.다만 이들 의 중심 은 다 릅 니 다.
CountDownlatch 는 보통 특정한 스 레 드 A 에서 여러 개의 다른 스 레 드 가 임 무 를 수행 한 후에 야 실 행 됩 니 다.
한편,Cyclic Barrier 는 보통 한 스 레 드 가 서로 특정한 상태 로 기다 린 다음 에 이 스 레 드 를 동시에 실행 하 는 데 사 용 됩 니 다.
또한 Count Downlatch 는 다시 사용 할 수 없고 Cyclic Barrier 는 다시 사용 할 수 있 습 니 다.
2)Semaphore 는 사실 자물쇠 와 유사 합 니 다.그룹 자원 에 대한 접근 권한 을 제어 하 는 데 사 용 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.