컴포넌트의 스레드 안전성을 안정적으로 확보할 수 있고, 이와 함께 개발자가 코드를 작성하는 과정에서 실수를 한다 해도 스레드 안전성을 해치지 않도록 도와주는 클래스 구성 방법을 알아보자!
클래스가 스레드 안전성을 확보하도록 설계하고자 할 때에는 다음과 같은 세 가지를 고려해야 한다.
@ThreadSafe
public final class Counter{
@GuardedBy("this") private long value =0;
public synchronized long getValue(){
return value;
}
public synchronized long increment(){
if(value == Long.MAX_VALUE){
throw new IllegalStateException("counter overflow")
}
return ++value;
}
}
동기화정책
객체 내부의 여러 변수가 갖고 있는 현재 상태를 사용하고자 할 때 값이 계속해서 변하는 상황에서도 값을 안전하게 사용할 수 있도록 조절하는 방법
동기화 정책 종류