Replies: 1 comment
-
이 책에서 언급하는 문맥이 동기화 문제를 해결하기 위해 많은 히스토리가 있었고, 저는 특히 게임 산업에서 동시성 제어를 다룰 기회가 많을 것 같은 생각이 듭니다. P.S 유명 저서 클린 코드에서도 동시성을 언급하는데, 거기에서 와닿는 말이 있어 남겨둘게요.
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
아이템 79. 과도한 동기화는 피하라
충분하지 못한 동기화의 피해
에 다뤘는데 이번 주제는 반대 상황을 다룸과도한 동기화의 문제점
응답 불가와 안전 실패를 피하려면 동기화 메서드나 동기화 블록 안에서는 제어를 절대로 클라이언트에 양도하면 안됨!
표준 함수형 인터페이스를 사용하라
에 맞는대로라면 BiConsumer 를 사용하는게 맞았지 않나 생각함....ObservableSet은 눈에 보기에 잘 동작할 것으로 보이나 문제가 있음
ConcurrentModificationException
을 던짐참고
람다는 자신을 참조할 수단이 없음
(아이템 42. 익명 클래스보다는 람다를 사용하라 #106 참고)다시 돌아와
ConcurrentModificationException을 던진 이유
교착 상태에 빠지는 이유
위와 똑같은 상황이지만 불변식이 임시로 깨진 경우
해결 방법
명시적으로 동기화한 곳이 사라졌다는 것이 중요한 포인트!
동기화 규칙
기본 규칙은 동기화 영역에서는 가능한 한 일을 적게 하는 것!
과도한 동기화와 성능
가변 클래스를 작성하는 2가지 선택지
자바도 초장기에는 이 지침을 따르지 않은 클래스가 많았음
선택하기 어렵다면 동기화하지 말고 대신 문서에 "스레드 안전하지 않다" 라고 명시하자!
클래스 내부에서 동기화 하는 경우 다양한 기법
여러 스레드가 호출할 가능성이 있는 메서드가 정적 필드를 수정한다면 그 필드를 사용하기 전에 반드시 동기화해야 함! (비결정적 행동도 용인하는 클래스라면 상관 없음)
정리
Beta Was this translation helpful? Give feedback.
All reactions