Sets.newConcurrentHashSet()的替代品是什么?(涉及IT技术)

4

我正在从Google Collections 0.9升级到1.0。看起来Sets.newConcurrentHashSet()不再可用。我曾在以下结构中使用它:

public static <K, V> Multimap<K, V> newConcurrentMultimap()
{
    return Multimaps.newMultimap( new ConcurrentHashMap<K, Collection<V>>(), new Supplier<Collection<V>>()
    {
        @Override
        public Collection<V> get()
        {
             return Sets.<V>newConcurrentHashSet();
         }
    } );
}

什么是替代Sets.newConcurrentHashSet()的最佳选择?

编辑: 使用此结构的原因是拥有一个可以安全地从多个线程读写的多重映射。它在大多数情况下被读取(并且将被频繁读取)。


正如您在下面的评论中指出的那样,它无论如何都不能实现您想要的功能。 - Kevin Bourrillion
3个回答

9

Sets.newConcurrentHashSet在1.0rc1版本中被撤回(提交日志)。我不知道为什么会被撤回,但你可以自己使用实现

Sets.newSetFromMap(new ConcurrentHashMap<V, Boolean>());

这就是我目前所做的。我只是在想它是否能够实现我的期望,因为Javadoc指出: “当任何并发操作更新multimap时,multimap不是线程安全的,即使map和factory生成的实例是线程安全的。” 我不喜欢使用同步包装器,因为那样就不再是并发的而是同步的了。 - Wim Deblauwe
1
你在想它是否能工作,因为javadoc明确告诉你它不能工作? :-) - Kevin Bourrillion
1
它以“退一步,向前两步”的方式被撤回;因为我们计划支持具有MapMaker中选项相当比例的并发集合,我们不想永远被困在那个newConcurrentHashSet方法中。很抱歉该功能尚未出现。 - Kevin Bourrillion

1
尝试使用MapMaker,然后使用newSetFromMap()

-1

您可以使用

Collections.newSetFromMap(new ConcurrentHashMap<>());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接