Hashtable
имеет каждый метод synchronized
, и это общедоступная информация. Например, вы можете наследовать от Hashtable
, добавлять больше synchronized
методов - и знать, что вы в основном работаете нормально, так как используете тот же механизм синхронизации .
Более того, ваш код может использовать блок synchronized (myHashTable)
, что фактически гарантирует отсутствие вызова методов myHashTable
из других потоков, пока вы находитесь в этом блоке.
Это все «подробности синхронизации» , которые доступны вам и которые вы можете использовать (не поощряя).
Не так с ConcurrentHashMap
: это столь же потокобезопасно (и даже более того, см., Например, ответ Питера Лоури) как Hashtable
, но вам не сказали как это безопасность потока достигнута. В результате вы не можете злоупотреблять или расширять его так, как вам нравится: вы должны использовать его как есть.