java - java中并发hashmap的生产者消费者模式

标签 java producer-consumer concurrenthashmap

我遇到以下问题,并且我不确定如何设计解决方案的各个部分:

我有一个很大的文本文件,我逐行读取。 我需要处理每一行并更新 HashMap。

据我所知,我需要一个生产者线程来从文件中读取行,并将这些行分派(dispatch)到消费者线程池。消费者线程应该更新ConcurrentHashMap,然后获取新行。

我的问题是: 消费者线程如何访问ConcurrentHashMap? 如果我使用固定线程池,生产者是否需要先将行添加到队列中,或者可以简单地提交或执行新的消费者?

编辑: Zim-Zam 是正确的;我希望消费者在完成后将结果转储到 ConcurrentHashMap 中。

我在主线程中创建 ConcurrentHashMap,并将对其的引用传递给构造函数中的消费者。消费者应该在其运行方法中添加或增加 AtomicInteger。当所有行都被读取并且消费者完成时,我如何在主线程中知道?

再次感谢。

最佳答案

您可以让所有消费者共享生产者添加到的同一个队列,或者您可以为每个消费者提供自己的队列,生产者通过循环链表或类似的数据结构访问该队列,以便每个消费者的队列接收或多或少相同数量的数据(例如,如果您有 3 个消费者,那么生产者会将数据添加到队列 1,然后是队列 2,然后是队列 3,然后是队列 1,等等)。

您可以为每个消费者提供对相同 ConcurrentHashMap 的引用(例如在消费者的构造函数中),或者您可以通过静态 getter 方法使 ConcurrentHashMap 可以访问。

关于java - java中并发hashmap的生产者消费者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534542/

相关文章:

java - getClass().getClassLoader().getResource(path) 始终返回 null,即使路径正确

java - 使用多线程的生产者消费者程序

ruby - 使用 EventMachine 设置无限循环以生成随机数据

java - ConcurrentHashMap 有什么缺点吗?

java - ConcurrentHashMap jdk 8 使用 TreeNodes 而不是 List .. 为什么?

Java Math.random 与数组

java - 我的对象会被垃圾收集吗?

java - 如何通过Java程序调节扬声器音量?

python - 使用 Python 实现单个消费者、多个生产者场景的最佳方法是什么?

java - 是否可以通过它的 key 同步 ConcurrentHashMap 更新?