天下之事,必先处之难,而后易之。

Hashtable和ConcurrentHashMap如何实现线程安全

目录

未做同步控制时,代码在多线程下是安全的吗?

HashMap的是线程安全的吗?

那么线程安全的Map-HashTable是如何实现线程安全的呢?

有了HashTable为何还要有个ConcurrentHashMap?

ConcurrentHashMap是如何实现线程安全的呢?


未做同步控制时,代码在多线程下是安全的吗?

代码执行都是靠线程调度执行的,默认情况下就是多线程的,所以不做同步控制理论上代码在多线程情况下存在线程安全问题。

我们可以通过对方法和变量操作加锁、使用线程安全的方法和操作方式解决。

HashMap的是线程安全的吗?

非线程安全,本身没有任何线程安全的控制。比如put,remove这些操作都是普通方法。

那么线程安全的Map-HashTable是如何实现线程安全的呢?

HashTable在和数据本身操作的方法上都加了一个synchronized关键字,这种方式在多线程环境下效率不高,因为对数据操作只允许一个线程进行处理。

有了HashTable为何还要有个ConcurrentHashMap?

ConcurrentHashMap是为了解决在多线程环境下提升数据操作效率而设计的一个数据结构,解决了HashTable效率上的问题,提供了并发访问的可能。

ConcurrentHashMap是如何实现线程安全的呢?

Hash算法有个桶的概念,相同的hash值都放在同一个桶里面。

JDK1.7以前默认是16个Segment分段锁;将对象放在一个分段锁里面,只需要获取到该分段锁即可操作,不影响其他数据的操作,提高了并发读避免了全部加锁问题;锁的内部是一个链表管理的对象数组。

JDK1.8以后,对分段锁做了扩容,允许的并发数更多,也有Segment分段和链表的概念。

posted @ 2024-09-04 09:44  boonya  阅读(12)  评论(0编辑  收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。