当前位置: 首页 > news >正文

白家乐网站怎么建站上饶网站开发 app开发

白家乐网站怎么建站,上饶网站开发 app开发,网站被k的迹象,阿里云服务器是干什么用的算不上死磕,里面太痛苦了,现在很多位移等操作还看不懂,只是先理清大致思路,面试用 concurrentHashMap的实现原理 为啥会用到?并发安全。之前都用的hashtable实现线程安全的map,但是太过笨重,不…

算不上死磕,里面太痛苦了,现在很多位移等操作还看不懂,只是先理清大致思路,面试用

concurrentHashMap的实现原理

为啥会用到?并发安全。之前都用的hashtable实现线程安全的map,但是太过笨重,不管是put还是get都直接synchronized锁住。性能低。在jdk1.5 Doug Lea搞了个concurrentHashMap。

那它是如何实现线程安全呢?
jdk1.7 采用reentrantLock+segment
jdk1.8 采用 synchronized+cas

segment有什么好处?给每个segment加锁,当一个线程用一个锁访问其中一个段的时候,其他段的数据也可以被其他线程访问,实现真正的并发访问。

那1.8呢,为啥改用synchronized+cas了?底层是hashMap,也就是数组+链表+红黑树,ConcurrentHashMap采用Node类作为基本的存储单元,每个键值对(key-value)都存储在一个Node中,使用了volatile关键字修饰value和next,保证并发的可见性。

put方法

流程:
如果key或者value为null,抛空指针异常,这点和hashMap不同

static final int spread(int h) {  // 和hashMap类似,先扰动算法,hash异或自身右移16位得到更离散的hash值  // 然后跟 32位最大正整数做与运算,确保最高位是0,避免hash值为1导致可能的数组越界return (h ^ (h >>> 16)) & HASH_BITS;  
}

如果table为null或者table的长度为0,则初始化table,里面也用到CAS自旋

if (tab == null || (n = tab.length) == 0)tab = initTable(); 

不为空,和hashMap类似,找桶中的位置,(n-1)&hash 通过tableAt这个CAS方法查看该位置是否有元素,没有,casTabAt()方法CAS操作将元素插入到Hash

else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {if (casTabAt(tab, i, null,new Node<K,V>(hash, key, value, null)))  // 桶内为空,CAS 放入,不加锁,成功了就直接 break 跳出break; 

如果有元素,发生了hash冲突,如果hash==MOVED说明正在扩容,resize;否则使用synchronized同步块上锁当前节点Node,插入也是三类,如果相同value,替换;如果红黑树,红黑树处理,如果一直没得,链表尾插。
执行完synchronized(f)同步代码块之后会检查binCount,如果大于等于TREEIFY_THRESHOLD = 8则进行treeifyBin操作尝试将该链表转换为红黑树

最后执行了一个addCount方法,主要用于统计数量以及决定是否需要扩容,在并发模式下,没有用CAS计数,而是分治的思想,定义了一个数组来计数,每次线程需要计数的时候,都通过随机的方式获取一个数组下标的位置进行操作,这样就可以尽可能的降低了锁的粒度,最后获取 size 时,则通过遍历数组来实现计数,当然具体CounterCell里面也用到CAS。

扩容

addCount 在添加元素数量的同时,也会判断当前 ConcurrentHashMap 的大小是否达到了扩容的阈值,如果达到,需要扩容。扩容也支持多线程同时进行。

满足扩容条件之后,采用的是分段扩容法,即每个线程负责一段,默认最小是 16,也就是说如果 ConcurrentHashMap 中只有 16 个槽位,那么就只会有一个线程参与扩容。如果大于 16 则根据当前 CPU 数来进行分配,最大参与扩容线程数不会超过 CPU 数

参考

  1. ConcurrentHashMap面试十连问,你能扛到第几问?
  2. 面试:为了进阿里,死磕了ConcurrentHashMap源码和面试题(一)
http://www.yayakq.cn/news/47505/

相关文章:

  • 微餐饮网站建设怎样做网站制作团队
  • 乌兰县wap网站建设公司宿迁做百度网站地点
  • 加强门户网站建设的讲话关于外贸公司的网站
  • 外汇网站源码 asp如何进行网络推广市场定位
  • 建一个网站的费用传奇网页链接
  • 哈尔滨最好的网站建设公司建设银行激活社保卡网站
  • 加强网站建设的色和尙做爰网站
  • 成都网站推广创新互联四川建设报名系统官网
  • 怎么上传网站iis怎么免费注册公司
  • 公司网站用什么语言开发厦门百度推广怎么做
  • 东莞做营销型网站网站建设与开发学习
  • wordpress读取txt北京网站优化体验
  • 中国城乡住房和城乡建设部网站首页网站做关键词排名
  • 医院网站建设方案详细正规企业网站开发使用方法
  • seo整站如何优化wordpress优化软件
  • 网站建设公司的销售好做吗瑞昌市建设局网站
  • 广州市网站建设制作费用《网站平台建设》课程实训
  • 无锡哪里有建设网站深圳led网站建设
  • 给别人做彩票网站违法吗网络营销课程建议
  • 毕业设计 建设网站免费公司取名器
  • 南宁信息建设网站asp.net 制作网站开发
  • 网站建设申请报告html网页制作参考文献
  • 为什么谷歌网站打不开万网的网站怎么建设
  • 做企业网站收费河源北京网站建设
  • 企业信息查询网官网太原seo计费管理
  • 常州市新北区建设与管理局网站网页游戏排行2013
  • 高新网站开发多少钱雄安建设集团有限公司网站
  • 网站建设心得感想企业网站建设要求标准说明
  • 大数据平台建站网站建设方案书 腾讯
  • 公司支付网站建设费进什么费用点评类网站建设