1. 程式人生 > >原來,JDK8的ConcurrentHashMap也會造成CPU 100%

原來,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

服務推薦