想象一下生产者 - 消费者场景,线程A生成条目,一个到多个其他线程使用它们。
为此,我将一堆条目传递给每个消费者线程。
这样做我问自己它是否更便宜(主要是cpu utlization,内存中的次要):
HashMap
的单独实例。在将Map
传递给一个使用者之后,将创建Map
的新实例并用于将下一个生成的条目传递给下一个帖子或
ConcurrentHashMap
并为每个使用者线程创建Iterator
并在将Iterator
传递给清除Map
的线程后 - 以便每个Iterator包含其自己对基础Map
。答案 0 :(得分:5)
java并发包为这种情况提供了一种数据结构。
@see java.util.concurrent.BlockingDeque
但请做一些性能测试:因为结果很大程度上取决于你的用例。并且如果这只是微优化,那么:干净,易于理解,线程保存方法将比没有影响的性能优化好得多。
答案 1 :(得分:0)
cpu-wise最昂贵的是线程争用。似乎,你的第一种方法根本不会产生任何争用 - 每个线程都会有它的本地版本的Map - 以牺牲更高的内存消耗为代价。
举个例子,我会针对几个设置(线程数,地图大小等)的两个场景进行基准测试。没有基准就很难说清楚确切的数据。