반응형
wait와 notify를 정확하게 사용하는 것이 어렵기 때문에, 릴리즈 1.5부터 자바 플랫폼에서 제공하는 고수준 병행성 유틸리티를 사용해야 한다.
java.util.concurrent에 포함된 유틸리티
· 실행자 프레임워크(executor framework)
· 병행 컬렉션(concurrent collection)
· 동기자(synchronizer)
병행성 컬렉션은 List, Queue, Map등의 표준 컬렉션 인터페이스에 대한 고성능 병행 컬렉션 구현을 제공한다. 병행성을 높이기 위해 동기화를 내부적으로 처리한다.
· 컬렉션 외부에서 병행성을 처리하는 것은 불가능하다.
· 락을 걸어봐야 아무 효과가 없을 뿐만 아니라 프로그램만 느려진다.
// ConcurrentMap으로 구현한 병행 정규화 맵 - 최적이 아님
private static final ConcurrentMap<String, String> map =
new ConcurrentHashMap<String, String>();
public static String intern(String s) {
String previousValue = map.putIfAbsent(s, s);
return previousValue = null ? s : previousValue;
}
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 67 과도한 동기는 피하라 (0) | 2023.04.26 |
---|---|
<Effective Java> RULE 68 스레드보다는 실행자와 태스크를 이용하라 (0) | 2023.04.26 |
<Effective Java> RULE 70 스레드 안전성에 대해 문서로 남겨라 (0) | 2023.04.26 |
<Effective Java> RULE 71 초기화 지연은 신중하게 하라 (0) | 2023.04.25 |
<Effective Java> RULE 72 스레드 스케줄러에 의존하지 마라 (0) | 2023.04.25 |