신 호 량 메커니즘 Semaphore
Semaphore 는 현재 방문 의 개 수 를 유지 하고 동기 화 메커니즘 을 제공 하 며 동시에 방문 하 는 개 수 를 제어 합 니 다.데이터 구조 에서 링크 는 '무한' 노드 를 저장 할 수 있 고 Semaphore 로 유한 한 크기 의 링크 를 실현 할 수 있 습 니 다.또한 잠 금 ReentrantLock 에 다시 들 어가 도 이 기능 을 실현 할 수 있 지만 실현 에 있어 서 는 책임 을 져 야 하고 코드 도 복잡 해 야 합 니 다.
아래 데모 에 서 는 5 개의 허 가 를 받 은 Semaphore 가 있 고 20 개의 스 레 드 가 이 자원 에 접근 할 것 이 라 고 밝 혔 습 니 다. acquire () 와 release () 를 통 해 방문 허 가 를 받 고 방출 합 니 다.
package concurrent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class TestSemaphore {
public static void main(String[] args) {
//
ExecutorService exec = Executors.newCachedThreadPool();
// 5
final Semaphore semp = new Semaphore(5);
// 20
for (int index = 0; index < 20; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
//
semp.acquire();
System.out.println("Accessing: " + NO);
Thread.sleep((long) (Math.random() * 10000));
// ,
semp.release();
} catch (InterruptedException e) {
}
}
};
exec.execute(run);
}
//
exec.shutdown();
}
}
실행 결과: 액세스: 0 액세스: 1A 액세스: 2Accessing: 3... 액세스: 17 액세스: 18 액세스: 19
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.