한 메서드를 여러 스레드가 동시에 호출할 때 그 메서드가 어떻게 동작하느냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 중요한 계약과 같음
API 문서에서 아무런 언급도 없으면 그 클래스 사용자는 나름의 가정을 해야만 해야 함
→ 만약 그 가정이 틀리면 클라이언트 프로그램은 동기화를 충분히 하지 못하거나(아이템 78), 지나치게 한(아이템 79) 상태일 것이며, 두 경우 모두 심각한 오류로 이어질 수 있음
메서드 선언에 synchronized 한정자를 선언하는것만으로 그 메서드가 스레드 안전하다고 믿기는 어려움
멀티스레드 환경에서도 API를 안전하게 사용하게 하려면 클래스가 지원하는 스레드 안전성 수준을 정확히 명시해야 함
불변(immutable)
무조건적 스레드 안전(unconditionally thread-safe)
조건부 스레드 안전(conditionally thread-safe)
스레드 안전하지 않음(not thread-safe)
스레드 적대적(thread-hostile)