1、典型回答
Hashtable 保证线程安全主要是通过给关键方法,例如 put 添加方法、remove 删除方法,添加 synchronized 加锁来保证线程安全的。
2、全面剖析
Hashtable 保证线程安全的方法实现非常简单粗暴,就是给关键方法整体添加 synchronized 来保证线程安全的,例如以下 put 源码实现:
还有 remove 万法的源码实现:
甚至是给查询方法 get 也加了 synchronized,如下源码所示:
所以,Hashtable 虽然实现了线程安全,但因为其简单粗暴的实现方式,导致 Hashtable 的性能很低,因此不推荐在实际工作中使用。
3、知识扩展
Hashtable 诞生于JDK 1.0,所以在后续的版本中推出了 HashMap (JDK 1.2 推出,单线程环境下使用)和ConcurrentHashMap (DK 1.5 推出,多线程环境下使用)来替代 Hashtable 的。
为什么 ConcurrentHashMap 性能比 Hashtable 效率高? 以及 ConcurrentHashMap 是如何保证线程安全的? 请参考: ConcurrentHashMap 为什么是线程安全的?-CSDN博客
一层一层递进,方得始终