原理分析
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
暂无评论内容