我有一个HashMap,它由唯一的int键(autoboxing to Integer)和double []值组成。大小是~100。 我只使用.put()& .get()方法。 我需要定期“重置”HashMap并使用新的键/值对重新填充它。我在循环中使用.clear()和.put()来重新填充(我也可以简单地创建一个新的HashMap)。
在单线程环境中,完全没有问题。
在多线程环境中,我可以使用SynchronizedMap或ConcurrentHashMap,两者都会照顾我的put()& get()线程安全。
.clear()方法怎么样?如何确保它的线程安全?我应该只使用同步块吗?
另外,在这种情况下,如何创建新的HashMap会对线程安全产生影响?
答案 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 }