← 질문 목록
#72깊이 0
락보다 높은 수준의 도구를 먼저 고르는 이유는?
검증된 원자 연산과 대기 정책을 재사용해 경쟁 조건과 교착 위험을 줄이기 때문이다. 작업 성격에 맞는 가장 높은 수준의 도구를 고른다.
- CompletableFuture비동기 결과 조합
- ExecutorService실행 정책과 작업 분리
- BlockingQueue생산자·소비자 조절
- 동시 컬렉션·원자 변수공유 상태 갱신
- Lock·동기화 도구임계 구역 제어
공유 맵의 get 뒤 put은 두 번의 연산이라 경쟁할 수 있다. ConcurrentHashMap의 computeIfAbsent처럼 의도를 한 원자 연산으로 표현해야 한다.
AtomicInteger는 한 값의 갱신에는 맞지만 여러 필드 불변식까지 묶지 못한다. 그런 경우 Lock이나 synchronized로 임계 구역을 만든다.
ExecutorService는 작업 제출과 스레드 생명 주기를 분리한다. 큐 용량과 거부 정책을 정하지 않으면 과부하가 메모리 증가로 바뀔 수 있다.