Hashtable 是如何保证线程安全的?

时间:2024-03-25 07:59:58

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博客

一层一层递进,方得始终