两者都是线程安全的哈希表,但锁机制完全不同,这直接导致了性能上的巨大差距。Hashtable是JDK1.0的老古董,所有方法都加了synchronized,相当于给整张表上了一把大锁。10个线程同时来访问,9个得排队等着,并发度就是1。
ConcurentHashMap在JDK 8里采用CAS+synchronized 配合的细粒度锁。往空桶里插数据用CAS无锁写入,有冲突时才用synchronized锁住单个桶的头节点。一张表默认16个桶,理论上16个线程可以同时写不同的桶,互不干扰。
两者都是线程安全的哈希表,但锁机制完全不同,这直接导致了性能上的巨大差距。Hashtable是JDK1.0的老古董,所有方法都加了synchronized,相当于给整张表上了一把大锁。10个线程同时来访问,9个得排队等着,并发度就是1。
ConcurentHashMap在JDK 8里采用CAS+synchronized 配合的细粒度锁。往空桶里插数据用CAS无锁写入,有冲突时才用synchronized锁住单个桶的头节点。一张表默认16个桶,理论上16个线程可以同时写不同的桶,互不干扰。
输入,输出,复盘,重复。
文章总数
12
本文阅读
0