От устаревших синхронизированных коллекций к современным альтернативам
Замените 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)
Как это работает
Vector и Hashtable синхронизируют каждую операцию через устаревшие API. В современном коде для данных, ограниченных одним потоком, обычно следует использовать ArrayList или HashMap, а когда требуется совместное изменение из нескольких потоков — специализированные конкурентные коллекции.
Связанная документация
Доказательство