Ответ
Hashtable обеспечивает потокобезопасность через полную синхронизацию всех публичных методов с использованием ключевого слова synchronized.
Механизм: Каждый метод класса (такой как put, get, remove, contains) объявлен как synchronized. Это означает, что для всего объекта существует единая блокировка (монитор), и только один поток может выполнять любой из этих методов в данный момент времени.
Пример и недостатки:
Hashtable<String, Integer> table = new Hashtable<>();
// Все вызовы синхронизированы на объекте 'table'
table.put("A", 1); // Блокирует весь объект
table.get("A"); // Также блокирует весь объект
Основные проблемы этого подхода:
- Низкая производительность при конкуренции: Даже операции чтения (
get) блокируют объект, создавая узкое место (bottleneck). - Устаревший дизайн: Класс считается legacy. Для новых проектов всегда следует использовать
ConcurrentHashMap. - Отсутствие продвинутых атомарных операций: Нет аналогов методов
compute()илиmerge()изConcurrentHashMap.
Вывод: Hashtable — это пример потокобезопасности через координацию (coarse-grained locking), которая надежна, но неэффективна для высоконагруженных приложений.