[아이템 82] 스레드 안전성 수준을 문서화하라.

일반적으로 스레드 안정성이 높은 순

  • 불변: 외부 동기화가 필요없다. 대표적으로 String, Long, BigInteger
  • 무조건적 스레드 안전: 이 클래스의 인스턴스는 수정될 수 있으나, 내부에서 충실히 동기화하여 별도의 외부 동기화 없이 사용해도 안전 대표적으로 ConcurrentHashMap
  • 조건부 스레드 안전: 일부 메서드는 동시에 사용하려면 외부 동기화가 필요. Collections.synchronized 래퍼 메서드가 반환한 컬렉션이 여기 속함
  • 스레드 비안전: 동시에 시용하려면 메서드 호출을 클라이언트가 선택한 외부 동기화 메커니즘으로 감싸야한다. ArrayList, HashMap 같은 기본 컬렉션.
  • 스레드 적대적: 이 클래스는 모든 메서드 호출을 외부 동기화로 감싸더라도 멀티스레드 환경에서 안전하지 않다.

모든 클래스가 자신의 스레드 안전성 정보를 명확하게 문서화 해야한다. 애너테이션을 활용할 수도 있다. synchronized 한정자는 문서화랑 관련이 없다. 구현 이슈일 뿐 API에 속하지 않기 떄문이다.