Java에서 컬렉션은 Java를 그 자체로 강력한 언어로 만드는 가장 중요한 개념 중 하나라는 것을 알고 있습니다. 모든 유형의 데이터를 가능한 CRUD 작업과 함께 편리하고 효율적인 방식으로 지원하도록 하는 Java의 컬렉션만 지원합니다.
그러나 같은 단계에서 컬렉션이 멀티 스레딩에 노출되면 컬렉션이 멀티 스레딩 환경에 대한 지원이 부족하기 때문에 성능이 다소 저하됩니다. 이러한 제한을 극복하기 위해 Java는 다중 스레드 환경 제한을 극복할 뿐만 아니라 다중 스레드 데이터로 수행할 수 있도록 Java를 향상시키는 Concurrent Collections를 도입했습니다.
다음은 기존 컬렉션과 동시 컬렉션 간의 중요한 차이점입니다.
시니어 번호 | 키 | 전통 컬렉션 | 동시 컬렉션 |
---|---|---|---|
1 | 스레드 안전성 | Array List, Linked List, Hash Map 등과 같은 Java Collections의 대부분의 클래식 클래스는 동기화되지 않으며 멀티 스레딩 환경에서 스레드로부터 안전하지 않습니다. | 반면에 Java는 동시 컬렉션에 동일한 클래스를 도입하고 동기화를 구현하여 이러한 클래스를 동기화됨으로 만들 뿐만 아니라 본질적으로 스레드로부터 안전합니다. |
2 | 잠금 장치 | 벡터 및 스택과 같은 기존 컬렉션과 동기화된 클래스가 있지만 이러한 클래스는 전체 컬렉션에 대한 잠금을 사용하여 성능과 실행 속도를 감소시킵니다. | 반면 동시 컬렉션은 멀티 스레딩 환경에서 컬렉션의 일부만 잠그는 부분 잠금 개념을 도입하여 이러한 환경에서 컬렉션의 성능과 속도를 향상시킵니다. |
3 | 런타임 예외 | 기존 컬렉션의 경우 컬렉션 반복 중에 별도의 스레드를 통해 컬렉션을 수정하려고 하면 런타임 예외 ConcurrentModificationException이 발생합니다. | 반면 동시 컬렉션을 다루는 경우, 즉 동시 컬렉션이 반복 중에 컬렉션 수정을 허용하는 경우 이러한 예외가 발생하지 않습니다. |
4 | 기본 설정 | 위에서 언급한 이유로 인해 기존 컬렉션은 멀티 스레딩 환경에서 선호되지 않습니다. | 반면에 동시 컬렉션은 주로 멀티 스레딩 환경에서 선호됩니다. |
5 | 시장 소개 | 기존 컬렉션은 Java의 레거시 컬렉션 유형이며 동시 컬렉션보다 먼저 도입됩니다. | 동시 컬렉션이 JDK 1.5에 도입된 반면, 즉 기존 컬렉션 이후에 도입되었습니다. |