개념정리

Vector Hashtable VS Collections.synchronizedXxx()

춘핑이 2023. 4. 4. 12:39

멀티 스레드 환경에서 ArrayList와 HashMap은 안전하지 않다.
각 쓰레드마다 어느 데이터에 동시에 접근하여 삽입과 삭제와 같은 수정을 하려고 할때 개발자 의도와는 다르게 서로 경쟁해서 객체를 다루게 되어 오작동이 발생할 수 있다.
이를 해결하기 위해 각각 존재하는 컬렉션이 Vector와 Hashtable이다.
이 두 컬렉션은 동기화된 메소드를 가지고 있어서 멀티 스레드 환경에서 안전하다.

그런데 이 Vector와 Hashtable은 오래된 컬렉션이다.
강제 동기화로 인해 느려진 성능을 보여준다. 동기화라는 말이 좋아 보이는 것이지 동시에 처리되도 문제가 발생하지 않은 것은 동시에 처리 되지 못하게 하였음을 뜻하고 동시에 하면 10초안에 처리될 수 있는 것을 동기화 때문에 20초가 걸리는 것이다. 그래서 상황에 따라 맞는 것을 활용해야한다.

synchronizedList() 메서드를 통해 동기화 처리가 된 리스트를 만들어주는 기능을 지원해준다. ArrayList 뿐만 아니라 LinkedList 및 다른 컬렉션 역시 자료구조의 특성을 유지하면서도 동기화 처리가 된 콜렉션들을 만들어 준다.

Vector는 성능저하로 인해서 사용하는 것을 지양하고 Collections.synchronizedXxx()을 사용하는 것이 더 좋다고 판단된다.