concurrenthashmap

1.8的concurrenthashmap部分讲解,如果有错还请谅解

1.7与1.8的区别

1.7与1.8都使用分段锁的思想,提高了写的并行度,读都没去加锁,读写不互斥,但写之间可能互斥,也可能不互斥。不过1.7使用的是ReentrantLock进行同步,1.8使用的synchronized进行同步,1.8进行数组的初始化过程使用了dcl单例的思想,就是双重检查+cas锁,就避免了多次创建数组,即多次进行数组初始化的动作,1.7的segment[idx]的初始化过程没有采用dcl单例的思想,多个线程进行segment[idx]的初始化就可能会制造垃圾对象。1.8的没拿到锁的线程直接阻塞的,并不会像1.7那样加锁失败之后还会尝试几次trylock去加锁,如果尝试都是失败之后,才会调用lock方法,还是失败线程就会发生阻塞,1.7的单向链表是头插法加入到链表里面去,而1.8如果是单向链表的是尾插法加入到链表里面去。

1.7的concurrenthashmap的数据结构

数据结构:数组+链表[(其实可以看成非矩阵式的二维数组+单向链表,为什么说是看成一个二维数组呢?就是需要两次定位,但又不是int[][]这种),是一个线程安全的map

不闲聊了,说本次的主题

先来看一段代码,是使用unsafe实现的一把cas锁,实现起来是不是很简单。解锁代码,是最简单的,这个问题留给看本篇博客的人解答吧。
cas锁
那我们再来看一段1.8concurrenthashmap一段代码,或者说我是抄袭Doug Lea这位大佬的。代码本来就是这样,一般思想是差不多的,实现起来的代码不会差到哪里去。just so so
1.8的concurrenthashmap
1.8的concurrenthashmap的put方法。当看成1.8的hashmap一样看就好了,挺简单的。只不过一个安全,一个不安全罢了,之后就没啥好讲的了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值