我有两个线程读取两个文件。每个线程从对象收集信息。当两个线程继续读取文件时,我想将生成的对象添加到线程共享的映射或临时列表中,并且我想在添加对象时同时处理从映射/临时列表中添加的对象.
我有兴趣为此使用生产者/消费者模型。但这会是在本身依赖于两个线程的进程上使用它的方式吗?BlockingQueue
在这些情况下可以使用 s 吗?
我有两个线程读取两个文件。每个线程从对象收集信息。当两个线程继续读取文件时,我想将生成的对象添加到线程共享的映射或临时列表中,并且我想在添加对象时同时处理从映射/临时列表中添加的对象.
我有兴趣为此使用生产者/消费者模型。但这会是在本身依赖于两个线程的进程上使用它的方式吗?BlockingQueue
在这些情况下可以使用 s 吗?
BlockingQueue 绝对是你想要的。
正如BlockingQueue中所述,
“BlockingQueue 实现主要用于生产者-消费者队列,但还支持 Collection 接口。”
除非文件太大而无法放入内存,否则最好将所有 file1 读入内存,然后将所有 file2 读入内存,然后处理它们——理想情况下,这只需要两次磁盘寻道。如果您尝试同时读取两个文件,那么您将导致磁盘头在两个文件之间进行大量寻道。
如果文件太大而无法放入内存,则读取 File1 的一个块,然后读取 File2 的一个块,然后处理这些块并清空它们的引用,以便垃圾收集器可以处理它们;重复直到文件被完全处理。
一旦文件被读入内存,您就可以并行处理它们,然后 aBlockingQueue
将是一个合适的数据结构。