问题
我们来探讨一个问题:
HashMap 为什么是线程不安全的?
我们都听说过hashmap不是线程安全的类,那么它的线程不安全到底是如何体现的呢?我们来从源码等几个角度来探究一下。
源码角度
put()方法内部调用了putVal()方法,putVal()的源码如下:
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize())