0

我有两个线程读取两个文件。每个线程从对象收集信息。当两个线程继续读取文件时,我想将生成的对象添加到线程共享的映射或临时列表中,并且我想在添加对象时同时处理从映射/临时列表中添加的对象.

我有兴趣为此使用生产者/消费者模型。但这会是在本身依赖于两个线程的进程上使用它的方式吗?BlockingQueue在这些情况下可以使用 s 吗?

4

2 回答 2

2

BlockingQueue 绝对是你想要的。
正如BlockingQueue中所述, “BlockingQueue 实现主要用于生产者-消费者队列,但还支持 Collection 接口。”

于 2013-08-23T03:55:20.000 回答
1

除非文件太大而无法放入内存,否则最好将所有 file1 读入内存,然后将所有 file2 读入内存,然后处理它们——理想情况下,这只需要两次磁盘寻道。如果您尝试同时读取两个文件,那么您将导致磁盘头在两个文件之间进行大量寻道。

如果文件太大而无法放入内存,则读取 File1 的一个块,然后读取 File2 的一个块,然后处理这些块并清空它们的引用,以便垃圾收集器可以处理它们;重复直到文件被完全处理。

一旦文件被读入内存,您就可以并行处理它们,然后 aBlockingQueue将是一个合适的数据结构。

于 2013-08-23T03:49:17.957 回答