我遇到以下问题,并且我不确定如何设计解决方案的各个部分:
我有一个很大的文本文件,我逐行读取。 我需要处理每一行并更新 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/