java에서 병렬 프로그래밍 시 고려해야 할 것들
업데이트:
자바 병렬 프로그래밍 <브라이언 게츠 외 5인> 책을 읽고 정리했습니다.
volatile
변수는 다음 상황에서만 쓰자
- 변수에 값을 저장하는 작업이 해당 변수의 현재 값과 관련이 없거나 해당 변수의 값을 변경하는 스레드가 하나만 존재
- 해당 변수가 객체의 불변조건을 이루는 다른 변수와 달리 불변조건에 관련되어 있지 않다.
- 해당 변수를 사용하는 동안에는 어떤 경우라도 락을 걸어 둘 필요가 없는 경우
volatile
을 사용한 코드는 synchronized
로 직접 동기화한 코드보다 읽기 어렵다.
객체를 공유 할 때의 원칙
-
스레드 한정
ThreadLocal
- 스레드 한정 객체는 해당 스레드 내부에 존재하면서 해당 스레드에서만 호출해 사용할 수 있다
-
읽기 전용 객체를 공유
- 추가적인 동기화 작업이 필요 없다
- 불변 객체 / 결과적으로 불변인 객체
-
스레드에 안전한 객체를 공유
- 객체 내부적으로 동기화가 되어 있음
- 외부에서 추가적인 동기화 작업이 필요 없다
-
동기화 방법 적용
- 가변 객체는 특정 락을 얻어야 사용할 수 있게끔 하는 등의 방법
계속해서 읽어나가는 중..
댓글남기기