책너두 5기 46일차
로버트 C. 마틴의 클린코드 p. 420~ p.428
내용정리
부록 A 동시성2
라이브러리를 이해하라
Executor 프레임워크
- 스레드 풀링으로 정교한 실행을 지원하는 프레임워크
- 스레드 풀을 관리하고, 풀 크기를 자동으로 조정하며, 필요하다면 스레드를 재 사용
스레드를 차단하지 않는(non blocking) 방법
- 최신 프로세서는 거의 지원.
- CAS(Compare and Swap)라 불리는 연산을 지원
다중 스레드 환경에서 안전하지 않은 클래스
- SimpleDateFormat
- 데이터베이스 연결
- java.util 컨테이너 클래스
- 서블릿
메서드 사이에 존재하는 의존성을 조심하라
- 두 스레드가 서로를 간섭해 예외가 발생할 가능성이 있다.
- 해결방안
- 실패를 용인한다.
- 클리언트를 바꿔 문제를 해결한다. 즉, 클라이언트-기반 잠금 메커니즘을 구현한다.
- 서버를 바꿔 문제를 해결한다. 서버에 맞춰 클라이언트도 바꾼다. 즉, 서버-기반 잠금 메커니즘을 구현한다.
실패를 용인한다.
떄로는 실패해도 괜찮도록 프로그램을 조정할 수 있다.
클라이언트-기반 잠금
서버를 사용하는 모든 프로그래머가 락을 기억해 객체에 걸었다 풀어야 하므로 다소 위험하다.
서버-기반 잠금
더 바람직한 이유
- 코드 중복이 줄어든다.
- 성능이 좋아진다.
- 오류가 발생할 가능성이 줄어든다.
- 스레드 정책이 하나다.
- 공유 변수 범위가 줄어든다.
###