java并发二

1、concurrentHashMap

针对jdk1.8,主要针对put方法与扩容方法。
容器往往在第一次put的时候进行初始化,默认大小16,每次扩容n<<1,即扩大一倍,通过元素的hash值与数组容量取余找到元素index,当数组长度小于64且数组容量小于负载大小的时候扩容,扩容时,会将当前链节点与树节点分成两份分别存储在原来位置与原来位置+n(数组长度)的位置,若树节点的长度小于6的时候,红黑树会重新转换为链式结构。put时,通过cas循环插入数据,若数组当前位置为空,直接插入,若未链节点,插入之后判断是否长度大于8,大于8转换为红黑树,若为树节点,则直接插入红黑树中。

2、concurrentLinkedQueue

线程安全队列,注意offer方法与pop方法,同时注意哨兵结点,与延迟更新的优势,延迟更新主要是因为每次offer之后都执行cas操作更新head和tail结点的话,和每隔一个节点更新一次会更浪费资源。

3、copyOnWriteArrayList

注意和读写锁的区别,读写锁在写的时候,读线程会被阻塞。而copyOnWriteArrayList读写都不会被阻塞,但是这个类的实时性比较差,通过复制原来的数组形成一个新的数组,再到新的数组中插入元素,之后再把旧数组的指向改变为行的数组。

猜你喜欢

转载自blog.csdn.net/qq_39772309/article/details/84641855
今日推荐