자바 병렬 프로그래밍 - 기본 원리

업데이트:

책 ‘자바 병렬 프로그래밍’ 1부 요약 내용

상세한 전부를 기억하지는 못해도, 최소한 이것만은 항상 염두에 두고 있자.

  1. 상태가 바뀔 수 있단 말이다!

    병렬성과 관련된 모든 문제점은 변경 가능한 변수에 접근하려는 시도를 적절하게 조율하는 것으로 해결할 수 있다. 변경 가능성이 낮으면 낮을수록 스레드 안전성을 확보하기가 쉽다.

  2. 변경 가능한 값이 아닌 변수는 모두 final로 선언하라.

  3. 불변 객체는 항상 그 자체로 스레드 안전하다.

    불변 객체는 병렬 프로그램을 엄청나게 간편하게 작성할 수 있도록 해준다. 불변 객체는 간결하면서 안전하고, 락이나 방어적 복사 과정을 거치지 않고도 얼마든지 공유해 사용할 수 있다.

  4. 캡슐화하면 복잡도를 쉽게 제어할 수 있다.

    데이터를 객체 내부에 캡슐화하면 값이 변경되는 자유도를 쉽게 제어할 수 있다. 객체 내부에서 동기화하는 기법을 캡슐화하면 동기화 정책을 손쉽게 적용할 수 있다.

  5. 변경 가능한 객체는 항상 락으로 막아줘야 한다.

  6. 불변 조건 내부에 들어가는 모든 변수는 동일한 락으로 막아줘야 한다.

  7. 복합 연산을 처리하는 동안에는 항상 락을 확보하고 있어야 한다.

    putIfAbsent

  8. 여러 스레드에서 변경 가능한 변수의 값을 사용하도록 되어 있으면서 적절한 동기화 기법이 적용되지 않은 프로그램은 올바른 결과를 내놓지 못한다.

  9. 동기화할 필요가 없는 부분에 대해서는 일부러 머리를 써서 고민할 필요가 없다.

    동기화할 필요가 없다고 추측한 결론에 의존해서는 안된다.

  10. 설계 단계부터 스레드 안전성을 염두에 두고 있어야 한다. 아니면 최소한 결과물로 작성된 클래스가 스레드에 안전하지 않다고 반드시 문서로 남겨야 한다.

  11. 프로그램 내부의 동기화 정책에 대한 문서를 남겨야 한다.

    javax.annotation.concurrent 애너테이션을 활용하자. @ThreadSafe 등등

댓글남기기