我有一个巨大的文件,其中有大约100万条记录。 我的要求是从文件中读取记录并具有可配置数量的线程,这些线程可以跨多个线程处理它们。
目前,我正在使用单个线程读取该文件并将其存储到集合中。
如何将集合元素按顺序传递给不同的线程以进行进一步处理?
答案 0 :(得分:0)
好的!!
您的要求似乎或多或少是生产者消费者范例Producer Consumer Paradigm。 如果您使用的是Java 1.5及更高版本,则可以使用并发集合。
BlockingQueue sharedQueue = new LinkedBlockingQueue();
//You can select any Collection Object above which implements BlockingQueue
您可以找到实现BlockingQueue
的其他类好的!!在这里,您的文件的阅读块将存储在您的sharedQueue
中,这意味着您的阅读逻辑将充当制作人。
例如在您的阅读文件主题中:
@Override
public void run() {
// read your file and put reading chunks in Queue
sharedQueue.put(yourReadingCHunk);
}
在您的消费者线程中,您将尝试从该队列中获取这些块。
@Override
public void run() {
while(true){
try {
System.out.println("Consumed: "+ sharedQueue.take());
} catch (InterruptedException ex) {
}
}
}
唯一的事情是你必须在创建线程时传递shareQueue
如下所示。
Thread iamreading= new Thread(new YourReadingFileClass(sharedQueue));
Thread iamUsing = new Thread(new YourUsingFileClass(sharedQueue));
有关生产者和消费者问题的更多信息使用此Link