原来,JDK8的ConcurrentHashMap也会造成CPU 100%

文章概要

大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 100%。这个问题在JDK8中的HashMap获得了解决。

传送门:HashMap死循环分析的修正版

其实JDK7中的HashMap在多线程环境下不止只有CPU 100%这一共怪异现象,它还可能造成插入的数据丢失,有兴趣的读者可以自行了解下。

对于HashMap多线程的问题,我们通常会这么反问:HashMap设计上就不是多线程安全的,何必要去在多线程环境下用呢?的确如此,我们不会傻到显式的在多线程环境下调用,但是又可能在你所关注的视角范围外是多线程的,其隐式地让HashMap置于多线程环境下了,这个又难以一下子察觉到。再者,对于HashMap多线程的问题,我们很多时候推荐使用ConcurrentHashMap来代替HashMap应用于多线程的环境,很不巧的是ConcurrentHashMap也有可能会造成CPU 100%的异常现象。这个怪异现象存在于JDK8的ConcurrentHashMap中,在JDK9中已经得到修复

https://bugs.openjdk.java.net/browse/JDK-8062841

原文链接

https://mp.weixin.qq.com/s?__biz=MzIwMzY1OTU1NQ%3D%3D&mid=2247485021&idx=1&sn=52e8251df51621607d0e9cde23839093&chksm=96cd4611a1bacf075de254e8929415b3378cf43e7ace791c06704b7fb39ac9c67fe1082c6220&mpshare=1&scene=23&srcid=%23rd

服务推荐

  • 私密代理ip
  • 隧道代理ip
  • 微信域名拦截检测服务
  • 微信域名在线拦截检测工具

你可能感兴趣的:(原来,JDK8的ConcurrentHashMap也会造成CPU 100%)