
原理分析
1、在HashMap中,put()方法行代码modCount++,这个代码一看就是线程不安全。
2、在扩展过程中取值不准确,HashMap的扩展将创建一个新空数组,并将旧的项目填入新的数组,如果此时去取值,则可以获得null值。
实例
publicclassHashMapNotSafe{
publicstaticvoidmain(String[]args){
finalMap<Integer,String>map=newHashMap<>();
finalIntegertargetKey=65535;//65535
finalStringtargetValue="v";
map.put(targetKey,targetValue);
newThread(()->{
IntStream.range(0,targetKey).forEach(key->map.put(key,"someValue"));
}).start();
while(true){
if(null==map.get(targetKey)){
thrownewRuntimeException("HashMapisnotthreadsafe.");
}
}
}
}
以上就是java HashMap的不安全分析,希望对大家有所帮助。更多Java学习指路:Java基础
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END

















































暂无评论内容