22import java .util .*;
33import java .util .concurrent .CopyOnWriteArrayList ;
44
5- // Broken - invokes alien method from synchronized block!
5+ // 원소가 추가되면 알려주는 집합 (420-425쪽)
66public class ObservableSet <E > extends ForwardingSet <E > {
77 public ObservableSet (Set <E > set ) { super (set ); }
88
9+ // 코드 79-1 잘못된 코드. 동기화 블록 안에서 외계인 메서드를 호출한다. (420쪽)
910// private final List<SetObserver<E>> observers
1011// = new ArrayList<>();
1112
@@ -28,7 +29,7 @@ public class ObservableSet<E> extends ForwardingSet<E> {
2829// }
2930// }
3031
31- // // Alien method moved outside of synchronized block - open calls
32+ // // 코드 79-3 외계인 메서드를 동기화 블록 바깥으로 옮겼다. - 열린 호출 (424쪽)
3233// private void notifyElementAdded(E element) {
3334// List<SetObserver<E>> snapshot = null;
3435// synchronized(observers) {
@@ -38,7 +39,7 @@ public class ObservableSet<E> extends ForwardingSet<E> {
3839// observer.added(this, element);
3940// }
4041
41- // Thread-safe observable set with CopyOnWriteArrayList
42+ // 코드 79-4 CopyOnWriteArrayList를 사용해 구현한 스레드 안전하고 관찰 가능한 집합 (425쪽)
4243 private final List <SetObserver <E >> observers =
4344 new CopyOnWriteArrayList <>();
4445
@@ -65,7 +66,7 @@ private void notifyElementAdded(E element) {
6566 @ Override public boolean addAll (Collection <? extends E > c ) {
6667 boolean result = false ;
6768 for (E element : c )
68- result |= add (element ); // Calls notifyElementAdded
69+ result |= add (element ); // notifyElementAdded를 호출한다.
6970 return result ;
7071 }
7172}
0 commit comments