hashmap的缺点

多线程不安全,在并发场景下使用时容易出现死循环,脏读问题等
死循环:https://juejin.im/post/5a66a08d5188253dc3321da0
(这篇好点)https://blog.csdn.net/justloveyou_/article/details/72783008
脏读:https://blog.csdn.net/qq_33591903/article/details/81672260

currrntHashMap的改进

由于扩容是按照2的幂次方进行的,所以扩展前在同一个桶中的元素,现在要么还是在原来的序号的桶里,或者就是原来的序号再加上一个2的幂次方,就这两种选择。
其中抛弃了JDK1.7的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。
CAS与synchronized :https://juejin.im/post/5c37377351882525ec200f9e

CAS(乐观锁)比synchronized(悲观锁)轻量级一点,消耗的资源比较小。
CAS 是 compare and swap 的简写,即比较并交换。它是指一种操作机制,而不是某个具体的类或方法。在 Java 平台上对这种操作进行了包装。在 Unsafe 类中,调用代码如下:
unsafe.compareAndSwapInt(this, valueOffset, expect, update);
复制代码它需要三个参数,分别是内存位置 V,旧的预期值 A 和新的值 B。操作时,先从内存位置读取到值,然后和预期值A比较。如果相等,则将此内存位置的值改为新值 B,返回 true。如果不相等,说明和其他线程冲突了,则不做任何改变,返回 false。
这种机制在不阻塞其他线程的情况下避免了并发冲突,比独占锁的性能高很多。 CAS 在 Java 的原子类和并发包中有大量使用。

最新文章

  1. JavaScript -Array.form方法
  2. Permutation test: p, CI, CI of P 置换检验相关统计量的计算
  3. 转载:Tomcat的JVM设置和连接数设置
  4. WLAN频段的选择
  5. 如何优化cocos2d程序的内存使用和程序大小
  6. javascript之简单的选择排序法
  7. 【Java】聊聊常用的非对称加密算法之一RSA的使用(Java)
  8. TOMOYO Linux(undone)
  9. linux服务之nfs
  10. Java之--Java基础知识
  11. 关于本地$.get(url,function(data)),异步获取数据
  12. springmvc继承activemq(原创)
  13. [Swift]LeetCode128. 最长连续序列 | Longest Consecutive Sequence
  14. matplotlib中的plt.ion()和plt.ioff()函数
  15. Thread类中start()方法喝run()方法有什么不同?
  16. HTTP之referrer
  17. spring 配置ibatis和自动分页
  18. 在windows下安装Jupyter Notebook的安装和使用
  19. shell脚本简单实例
  20. django新建项目,连接mysql数据库

热门文章

  1. win10环境下安装mysql-8.0.18-winx64
  2. 浅谈python的第三方库——pandas(一)
  3. Python 【图片转字符画】
  4. Vue自定义全局Toast和Loading
  5. JSP+Servlet+Ajax实现用户增删改查的例子
  6. 面试官:说说TCP和UDP的区别和应用场景
  7. ng--tolist说明
  8. list=null和list.size=0的区别
  9. css中content-box和border-box当宽度为百分比时的位置区别,vw和%区别
  10. sql注入常见绕过技巧