Growth-Collectors / effective-java

repository for effective java study
3 stars 2 forks source link

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

Open HanaHww2 opened 1 year ago

yeGenieee commented 1 year ago

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

여러 스레드가 하나의 메서드를 동시에 호출할 때, 그 메서드가 어떻게 동작하느냐는 클라이언트와 클래스 간의 중요한 계약과도 같다. 만약 API 문서에 아무런 언급이 없다면, 사용자는 나름의 가정을 하고 사용해야 한다. 스레드 안정성이 잘못되면

1. API 문서에 synchronized 한정자

2. 스레드 안전성 수준

1. 불변 (immutable)

2. 무조건적 스레드 안정 (unconditionally thread-safe)

3. 조건부 스레드 안전 (conditionally thread-safe)

4. 스레드 안전하지 않음 (not thread-safe)

5. 스레드 적대적 (thread-hostile)

3. Conditionally Thread-safe 의 문서화

4. Lock 제공

public void someMethod() { synchronized(lock) { // do something } }


- lock 필드는 항상 **`final`** 로 선언해야 한다
    - final로 선언하면 우연히라도 락 객체가 교체되는 일을 예방할 수 있다