부록 A 동시성2 (2)

라이브러리 이해하기

책너두 5기 46일차

로버트 C. 마틴의 클린코드 p. 420~ p.428

내용정리

부록 A 동시성2

라이브러리를 이해하라

Executor 프레임워크

  • 스레드 풀링으로 정교한 실행을 지원하는 프레임워크
  • 스레드 풀을 관리하고, 풀 크기를 자동으로 조정하며, 필요하다면 스레드를 재 사용

스레드를 차단하지 않는(non blocking) 방법

  • 최신 프로세서는 거의 지원.
  • CAS(Compare and Swap)라 불리는 연산을 지원

다중 스레드 환경에서 안전하지 않은 클래스

  • SimpleDateFormat
  • 데이터베이스 연결
  • java.util 컨테이너 클래스
  • 서블릿

메서드 사이에 존재하는 의존성을 조심하라

  • 두 스레드가 서로를 간섭해 예외가 발생할 가능성이 있다.
  • 해결방안
    • 실패를 용인한다.
    • 클리언트를 바꿔 문제를 해결한다. 즉, 클라이언트-기반 잠금 메커니즘을 구현한다.
    • 서버를 바꿔 문제를 해결한다. 서버에 맞춰 클라이언트도 바꾼다. 즉, 서버-기반 잠금 메커니즘을 구현한다.

실패를 용인한다.

떄로는 실패해도 괜찮도록 프로그램을 조정할 수 있다.

클라이언트-기반 잠금

서버를 사용하는 모든 프로그래머가 락을 기억해 객체에 걸었다 풀어야 하므로 다소 위험하다.

서버-기반 잠금

더 바람직한 이유

  • 코드 중복이 줄어든다.
  • 성능이 좋아진다.
  • 오류가 발생할 가능성이 줄어든다.
  • 스레드 정책이 하나다.
  • 공유 변수 범위가 줄어든다.

###