java에서 병렬 프로그래밍 시 고려해야 할 것들

업데이트:

자바 병렬 프로그래밍 <브라이언 게츠 외 5인> 책을 읽고 정리했습니다.

volatile 변수는 다음 상황에서만 쓰자

  • 변수에 값을 저장하는 작업이 해당 변수의 현재 값과 관련이 없거나 해당 변수의 값을 변경하는 스레드가 하나만 존재
  • 해당 변수가 객체의 불변조건을 이루는 다른 변수와 달리 불변조건에 관련되어 있지 않다.
  • 해당 변수를 사용하는 동안에는 어떤 경우라도 락을 걸어 둘 필요가 없는 경우

volatile 을 사용한 코드는 synchronized 로 직접 동기화한 코드보다 읽기 어렵다.

객체를 공유 할 때의 원칙

  • 스레드 한정 ThreadLocal

    • 스레드 한정 객체는 해당 스레드 내부에 존재하면서 해당 스레드에서만 호출해 사용할 수 있다
  • 읽기 전용 객체를 공유

    • 추가적인 동기화 작업이 필요 없다
    • 불변 객체 / 결과적으로 불변인 객체
  • 스레드에 안전한 객체를 공유

    • 객체 내부적으로 동기화가 되어 있음
    • 외부에서 추가적인 동기화 작업이 필요 없다
  • 동기화 방법 적용

    • 가변 객체는 특정 락을 얻어야 사용할 수 있게끔 하는 등의 방법

계속해서 읽어나가는 중..

댓글남기기