gpt4 book ai didi

java - 并发填充一个线程安全的集合

转载 作者:行者123 更新时间:2023-11-29 05:43:26 27 4
gpt4 key购买 nike

假设我有一个线程安全的集合,我将按以下方式填充它:

   Set set = new HashSet();
for (Map map : maps) {
set.addAll(doSomeExpensiveProcessing(map.keySet()));
}

同时执行此操作的最佳方式是什么? (即每个映射会同时将其键添加到集合中。

编辑 - 我知道 HashSet 不是线程安全的,但就我而言,这超出了问题的范围。

EDIT2 - 正确地指出,对于这个特定的场景,并发不会获得巨大的好处,但会有额外的步骤,我现在已将其包含在代码示例中。

最佳答案

这应该有效:

// NB - Be sure to use a concurrent form of Set here.
Set set = new HashSet();
ArrayList<Map> maps = new ArrayList<>();

public void test() {
for (final Map map : maps) {
new Thread(new Runnable() {
@Override
public void run() {
set.addAll(map.keySet());
}
}).start();
}
}

我知道你对 HashSet 的实现不感兴趣这是并发的,但为了完整起见,我想提一下选项。

你可以考虑 ConcurrentSkipListSet如果你的对象实现 Comparable ,或者一个 Collections.newSetFromMap(new ConcurrentHashMap<Object,Boolean>())会做。

关于java - 并发填充一个线程安全的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16673267/

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