자바 병렬 프로그래밍 - 기본 원리
업데이트:
책 ‘자바 병렬 프로그래밍’ 1부 요약 내용
상세한 전부를 기억하지는 못해도, 최소한 이것만은 항상 염두에 두고 있자.
-
상태가 바뀔 수 있단 말이다!
병렬성과 관련된 모든 문제점은 변경 가능한 변수에 접근하려는 시도를 적절하게 조율하는 것으로 해결할 수 있다. 변경 가능성이 낮으면 낮을수록 스레드 안전성을 확보하기가 쉽다.
-
변경 가능한 값이 아닌 변수는 모두
final
로 선언하라. -
불변 객체는 항상 그 자체로 스레드 안전하다.
불변 객체는 병렬 프로그램을 엄청나게 간편하게 작성할 수 있도록 해준다. 불변 객체는 간결하면서 안전하고, 락이나 방어적 복사 과정을 거치지 않고도 얼마든지 공유해 사용할 수 있다.
-
캡슐화하면 복잡도를 쉽게 제어할 수 있다.
데이터를 객체 내부에 캡슐화하면 값이 변경되는 자유도를 쉽게 제어할 수 있다. 객체 내부에서 동기화하는 기법을 캡슐화하면 동기화 정책을 손쉽게 적용할 수 있다.
-
변경 가능한 객체는 항상 락으로 막아줘야 한다.
-
불변 조건 내부에 들어가는 모든 변수는 동일한 락으로 막아줘야 한다.
-
복합 연산을 처리하는 동안에는 항상 락을 확보하고 있어야 한다.
putIfAbsent
-
여러 스레드에서 변경 가능한 변수의 값을 사용하도록 되어 있으면서 적절한 동기화 기법이 적용되지 않은 프로그램은 올바른 결과를 내놓지 못한다.
-
동기화할 필요가 없는 부분에 대해서는 일부러 머리를 써서 고민할 필요가 없다.
동기화할 필요가 없다고 추측한 결론에 의존해서는 안된다.
-
설계 단계부터 스레드 안전성을 염두에 두고 있어야 한다. 아니면 최소한 결과물로 작성된 클래스가 스레드에 안전하지 않다고 반드시 문서로 남겨야 한다.
-
프로그램 내부의 동기화 정책에 대한 문서를 남겨야 한다.
javax.annotation.concurrent
애너테이션을 활용하자.@ThreadSafe
등등
댓글남기기