🔖 오늘 읽은 범위 : 13장, 동시성
😃 책에서 기억하고 싶은 내용을 써보세요.
객체는 처리의 추상화다. 스레드는 일정의 추상화다.
- 제임스 O. 코플리엔(James O.Coplien)
여기서 말하는 “구조적 이점”이란게 뭘까? 내가 내린 결론은 다음과 같다.
서블릿 모델은 앞에서 설명한 것처럼 원칙적으로는 서로의 시간대에 영향을 받지 않는다. 즉, 여러 사람이 웹 요청을 보내도 한 사람(단일 스레드)이 순차적으로 처리하는 것이 아니라, 여러 사람(다중 스레드)이 각자 하나씩 맡아서 처리하는 것이다. 각자 한 책임만을 맡고 있기 때문에, 구조적으로는 이득이라고 볼 수 있다. 다른 사람의 책임을 신경 쓸 필요가 없으니까! 하지만 그 결과들이 한 곳에 모여질 때, 동시성을 지키기 위한 마지막 까다로운 작업이 남아 있을 것이다.
public class X {
private int lastIdUsed; // 42로 설정
public int getNextId() {
return ++lastIdUsed;
}
}
getNextld()
를 호출한다고 가정하자. 결과는 셋 중 하나다.lasIdUsed
는 44가 된다.lastldUsed
는 44가 된다.lastldUsed
는 43이 된다. → 문제 발생!getNextld
메서드를 실행하는 잠재적인 경로 는 최대 12 ,870개에 달한다. lastldUsed
변수를 int 에서 long으로 변경하면 조합 가능한 경로 수는 2,704,156개로 증가한다.java.util.concurrent
패키지가 제공하는 클래스는 다중 스레드 환경에서 사용해도 안전하며, 성능도 좋다.java.util.concurrent
, java.util.concurrent.atomic
, java.util.locks
를 익혀라.