《자바 병행 프로그래밍 실전》 독서노트-제5장 기초 구축 모듈
동기화 컨테이너 클래스
동기화 용기 클래스가 라인을 안전하게 하는 방식: 모든 상태를 봉인하고 모든 공유 방법에 동기화를 사용하여 한 번에 한 라인만 접근할 수 있도록 합니다.동기화 컨테이너 클래스는 Vector, Hashtable, Collections로 구성됩니다.synchronizedXXX 등
** 동기화 용기 클래스의 문제 **
병렬 컨테이너
ConcurrentHashMap
차단 방법과 중단 방법
스레드가 막히는 원인은 일반적으로 입출력 대기, 잠금 대기, Thread 입니다.sleep, 다른 스레드 계산 결과를 기다리는 스레드 막힘 상태: BLOCKED,WAITING,TIMEDWAITING 스레드 중단: Thread.interrupt () 는 라인 중단 상태를 조회할 수 있습니다.
동기화 도구 클래스
** 폐쇄 **
FutureTask
** 신호량 **
** 울타리**
효율적이고 신축 가능한 결과 캐시 구축
public interface Computable{
V compute(A arg) throws InterruptedException;
}
public class ExpensiveFunction implements Computable {
@Override
public BigInteger compute(String arg) throws InterruptedException {
//장시간의 계산을 거친 후
return new BigInteger(arg);
}
}
public class Memoizerimplements Computable{
private final Map> cache = new ConcurrentHashMap<>();
private final Computablec;
public Memoizer(Computablec) {
this.c = c;
}
public V compute(A arg) {
Future f = cache.get(arg);
if (f == null) {
Callable eval = new Callable() {
@Override
public V call() throws Exception {
return c.compute(arg);
}
};
FutureTask ft = new FutureTask<>(eval);
f = cache.putIfAbsent(arg, ft);
if (f == null) {
f = ft;
ft.run();
}
}
try {
return f.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.