동기화(Synchronization)는 작업들 사이의 수행 시기를 맞추는 것을 말합니다. 자바에서 List, Set 그리고 Map과 같은 컬렉션(Collection)의 구현 클래스를 사용할 때 바로 이 동기화가 중요한 이슈가 될 수 있는데요. 동기화가 제공되는 것이 무조건적으로 좋은 것이 아니라 실행 속도 측면에서 성능의 차이가 있기 때문에 상황에 따라서 적절하게 사용하는 것이 좋습니다.
List<String> list = Collections.synchronizedList(new ArrayList<>()); // -- 방법 1
list.add("A");
list.add("B");
list.add("C");
synchronized (list) {
Iterator<String> iterator = list.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
}
CopyOnWriteArrayList<String> list1 = new CopyOnWriteArrayList<>(); // -- 방법 2
list1.add("A");
list1.add("B");
list1.add("C");
Iterator<String> iterator = list1.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());