레거시 동기화 컬렉션에서 모던 대안으로
Vector와 Hashtable을 실제 변경 가능성과 동시성 요구 사항에 맞게 선택한 컬렉션으로 대체합니다.
코드 비교
✕ Legacy synchronized collection
Hashtable<String, Session> sessions = new Hashtable<>(); sessions.put(id, session);
✓ Concurrent Collections API
ConcurrentMap<String, Session> sessions = new ConcurrentHashMap<>(); sessions.put(id, session);
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
의도적인 동시성
선택한 타입이 공유를 의도했는지 명확히 보여 줍니다.
더 나은 확장성
ConcurrentHashMap은 일반적인 접근에서 테이블 전체를 잠그는 단일 락을 피합니다.
모던 API
현재의 컬렉션 및 동시성 맵 연산과 자연스럽게 연동됩니다.
이전 방식
Hashtable
모던 방식
ConcurrentHashMap
JDK 버전
5
난이도
중급
JDK 지원
레거시 동기화 컬렉션에서 모던 대안으로
사용 가능
JDK 5 (2004년 9월) 이후 널리 사용 가능
동작 원리
Vector와 Hashtable은 레거시 API를 통해 모든 연산을 동기화합니다. 모던 코드는 일반적으로 스레드 내부에서만 사용하는 데이터에는 ArrayList나 HashMap을 사용하고, 공유 변경이 필요할 때는 목적에 맞게 설계된 동시성 컬렉션을 사용해야 합니다.
관련 문서
증명