Od przestarzałych synchronizowanych kolekcji do nowoczesnych alternatyw
Zastąp Vector i Hashtable kolekcjami dobranymi do rzeczywistych potrzeb w zakresie mutowalności i współbieżności.
Porównanie kodu
✕ 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);
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Świadoma współbieżność
Wybrany typ dokumentuje, czy oczekiwane jest współdzielenie.
Lepsza skalowalność
ConcurrentHashMap podczas zwykłego dostępu nie blokuje całej tablicy pojedynczą blokadą.
Nowoczesne API
Naturalnie współpracuje z obecnymi operacjami kolekcji i map współbieżnych.
Stare podejście
Hashtable
Nowoczesne podejście
ConcurrentHashMap
Od JDK
5
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Od przestarzałych synchronizowanych kolekcji do nowoczesnych alternatyw
Dostępne
Szeroko dostępne od JDK 5 (wrzesień 2004)
Jak to działa
Vector i Hashtable synchronizują każdą operację za pośrednictwem przestarzałych API. Nowoczesny kod powinien zwykle używać ArrayList lub HashMap dla danych ograniczonych do jednego wątku, a specjalizowanych kolekcji współbieżnych, gdy wymagana jest współdzielona modyfikacja.
Powiązana dokumentacja
Dowód