JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[Effective Java] Item 79. 제어를 클라이언트에 양도하는 예제 #49

Closed daebalprime closed 3 years ago

daebalprime commented 3 years ago

ITEM 79 421~422p에서 소개하는 예제 코드의 동작을 전혀 감을 잡지 못하겠습니다..ㅜㅜ

jth2747 commented 3 years ago

(코드는 책을 참고하셔도 되고 링크 올려놓은 걸 참고하셔도 됩니다. 코드 양이 좀 길어서..)

notifyElementAdded에서 하나의 스레드가 observers 에 lock 을 걸고 순회중인데, 갑자기 외부에서 해당 observer 에 접근이 가능하게 된 상황입니다. main 함수를 보시면 처음에 add 에 들어오고 조건문을 거쳐 notifyElementAdded 로 가게 되고, 그 이후 observers 에 lock 을 걸고 observers 를 순회하게 되는데 이때 observer 의 added 메소드로 가게 됩니다. 이 때 added에서 remove가 호출이 되고 notifyElementAdded 에서 작업하고 있는 observers 에 대한 순회 도중 변경이 일어난 것입니다..

https://github.com/java-squid/effective-java/issues/82

이 링크에 보시면 메소드 스택구조와 함께 설명이 되어 있는데 한번 참고하시면 좋을 것 같습니다