멀티 스레드 환경에서 Collection을 사용할 수 있게 해준다.
java.util.concurrent 패키지에 있는데 cas 연산, 동기화, 락 등 다양한 방법들을 사용해서 멀티 스레드 환경에 맞게 최적화를 해놓았다.
LinkeHashMap,LinkedHashSet처럼 입력 순서 보장되면서 멀티 스레드 환경에서 안전 Set, Map 구현체는 제공하지 않는다. Collections.synchronizedXxx()을 사용해야 한다.
List<Integer> list = new CopyOnWriteArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println("초기 리스트: " + list);
일반적인 리스트처럼 구현하면 된다. 나머니도 구현 방법은 비슷하다.
동시성 컬렉션을 사용함으로써 멀티 스레드 환겨에서 컬렉션을 안전하게 사용할 수 있다.
프록시를 활용해서 만든, 컬렉션을 멀티 스레드 환경에서 안정하게 사용할 수 있도록 해주는 메서드다.
클라이언트(요청하는 쪽)와 서버(서비스를 제공하는 쪽) 사이에서 중간 다리/대리인 역할을 하는 서버 또는 프로그램이다. 클라이언트의 요청을 직접 서버에 보내지 않고 프록시가 대신 받아서 서버에 전달하고, 서버의 응답도 프록시가 대신 받아서 클라이언트에게 전달해 주는 방식이라고도 할 수 있다.
이러한 방식을 통해 컬렉션에 전체적으로 synchronized 해서 만든 것이 Collections.synchronizedXxx()이다.
synchronizedList()
synchronizedCollection()
synchronizedMap()
synchronizedSet()
synchronizedNavigableMap()
synchronizedNavigableSet()
synchronizedSortedMap()
synchronizedSortedSet()
List<String> list = Collections.synchronizedList(new ArrayList<>()); 간다하게 사용하면서도 안전하게 컬렉션을 사용할 수 있다는 장점이 있다.
전체적으로 동기화를 걸어버리는 바람에 필요 없는 부분까지 동기화를 걸어 버린다. 그러면 오버헤드가 발생할 수 있고 전체적으로 성능도 저하된다.
이러한 문제를 해결하기 위해 나온 것이 동시성 컬렉션이다.