什么更便宜:遍历使用单个ConcurrentHashMap的n个迭代器或HashMap的n个实例

MRa*_*ser 4 java algorithm concurrency multithreading concurrenthashmap

想象一下生产者 - 消费者场景,线程A产生条目,一个到多个其他线程使用它们.

为此,我将一堆条目传递给每个消费者线程.

这样做我问自己它是否更便宜(主要是在cpu utlization方面,在内存中是次要的):

  • 为每个消费者线程提供一个单独的实例HashMap.在传递Map给一个使用者之后,Map将创建一个新的实例,并用于将下一个生成的条目传递给下一个线程

要么

  • 使用单个ConcurrentHashMapIterator为每个消费者线程创建一个并在传递Iterator给线程后清除Map- 以便每个Iterator包含其自己的底层视图Map.

你怎么看?一个或多或少的通用答案可能吗?
或者它是否强烈依赖于一些变量,如条目数,线程数等?
编辑:或者我应该使用其他类型的数据结构,可以更好地解决这些问题?

Ral*_*lph 5

java并发包为这种情况提供了一种数据结构.

@看到 java.util.concurrent.BlockingDeque

但是请做一些性能测试:因为结果非常依赖于你的用例.而如果这仅仅是微优化,比:干净,易于理解,线程保存方法会比优化性能要好得多影响内部消除.