从品牌网站建设到网络营销策划,从策略到执行的一站式服务
今天就跟大家聊聊有关java中怎么使用HashMap与ConcurrentHashMap实现高并发,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事网站设计制作、成都网站建设、企业网站建设、手机网站开发、网页设计、品牌网站设计、网页制作、做网站、建网站。成都创新互联公司拥有实力坚强的技术研发团队及素养的视觉设计专才。
HashMap底层就是一个数组,而数组的每一项都是一个链表,当我们新建一个HashMap时就会初始化一个数组。HashMap有两个参数影响性能,分别是初始容量和加载因子。
HashMap寻址方式:对于一个新插入的数据或者需要读取的数据,HashMap需要根据key按照一个计算规则计算出Hash值并对我们的数组长度进行取模,取模结果作为数组的index,而取模的代价远远高于位运算的代价,因此HashMap的数组长度必须是2的N次方,将计算出的Hash值和2的N-1次方进行“与”运算,结果与取模操作是相同的。
HashMap并不要求用户在指定HashMap容量时必须传入一个2的N次方的整数,而是在初始化时根据传入的容量值计算出一个满足2的N次方的容量。
总所周知HashMap不是一个线程安全的,主要体现在执行resize方法时可能会产生死循环,当HashMap的size超过他的容量*负载因子时,就需要对HashMap扩容,具体方法是创建一个新的原来容量的两倍的数组(保证新的容量仍然是2的N次方,从而保证上述的寻址方式仍然适用),同时把原来的数组重新插入到新的数组中,这一过程并不保证线程安全,而且在多线程并发调用时可能会产生死循环。
上面是单线程下reHash的扩容步骤。
在多线程情况下:
数据结构:
看完上述内容,你们对java中怎么使用HashMap与ConcurrentHashMap实现高并发有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图