gpt4 book ai didi

java - 在 Collections.synchronizedmap 上同步

转载 作者:行者123 更新时间:2023-11-29 06:33:56 29 4
gpt4 key购买 nike

在 Collections javadoc 中,它被提到如下..

当遍历其任何 Collection View 时,用户必须在返回的 map 上手动同步:

Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}

我的问题是,如果我声明了一个哈希表,我可以在不同步的情况下使用它吗?如下图

  Hashtable ht = new Hashtable();
Set s = m.keySet();

Iterator i = s.iterator();
while (i.hasNext())
foo(i.next());

最佳答案

是的。

From the docs :

The iterators returned by the iterator method of the collections returned by all of this class's "collection view methods" are fail-fast: if the Hashtable is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove method, the iterator will throw a ConcurrentModificationException.

因此,如果您想从 Hashtable 遍历迭代器,则必须确保同时没有其他人修改 Hashtable 对象。如果该对象在多个线程之间共享,那么最好的方法是在一个公共(public)对象上进行同步,例如您正在迭代的那个 Hashtable

关于java - 在 Collections.synchronizedmap 上同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251821/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com