同步HashMap的clear()方法的线程安全性

时间:2018-03-19 05:45:00

标签: java concurrency hashmap synchronization

我有一个HashMap,它由唯一的int键(autoboxing to Integer)和double []值组成。大小是~100。 我只使用.put()& .get()方法。 我需要定期“重置”HashMap并使用新的键/值对重新填充它。我在循环中使用.clear()和.put()来重新填充(我也可以简单地创建一个新的HashMap)。

在单线程环境中,完全没有问题。

在多线程环境中,我可以使用SynchronizedMap或ConcurrentHashMap,两者都会照顾我的put()& get()线程安全。

.clear()方法怎么样?如何确保它的线程安全?我应该只使用同步块吗?

另外,在这种情况下,如何创建新的HashMap会对线程安全产生影响?

1 个答案:

答案 0 :(得分:3)

clear method也有锁定管理。

  void  clear() {
577             if (count != 0) {
578                 lock();
579                 try {
580                     HashEntry<K,V>[] tab = table;
581                     for (int i = 0; i < tab.length ; i++)
582                         tab[i] = null;
583                     ++modCount;
584                     count = 0; // write-volatile
585                 } finally {
586                     unlock();
587                 }
588             }
589         }
590     }