카테고리 없음

[Effective Java] Item82. 스레드 안전성 수준을 문서화하라

📝 작성 : 2022.10.01  ⏱ 수정 : 

멀티스레드 환경에서도 API를 안전하게 사용하게 하려면 클래스가 지원하는 스레드 안전성 수준을 정확히 명시해야합니다.
다음 목록은 스레드 안전성이 높은 순으로 나열한것입니다.

  • 불변: 이 클래스의 인슨턴스는 마치 상수와 같아서 외부 동기화도 필요없습니다. String, Long, BigInteger가 대표적입니다.
  • 무조건적 스레드안전: 이 클래스의 인스턴스는 수정될 수 있으나, 내부에서 충실히 동기화하여 별도의 외부 동기화 없이 동시에 사용해도 안전합니다. AtomicLong, ConcurrentHashMap이 대표적입니다.
  • 조건부 스레드안전: 일부 메서드는 동시에 사용하려면 외부 동기화가 필요합니다. Collections.synchronize 래퍼 메서드가 반환한 컬렉션들이 여기에 속합니다
  • 스레드 안전하지 않음: 이 클래스의 인스턴스는 수정될 수 있습니다. 동시에 사용하려면 각각의(혹은 일련의) 메서드 호출을 클라이언트가 선택한 외부 동기화 메커니즘으로 감싸야합니다. ArrayList, HashMap 등의 기본 컬렉션이 여기에 속합니다.
  • 스레드 적대적: 모든 메서드 호출을 외부 동기화로 감싸더라도 멀티스레드 환경에서 안전하지 않습니다. 이 수준의 클래스는 일반적으로 정적데이터를 아무 동기화 없이 수정합니다.
반응형