按顺序读取文件并将其传递给多线程

时间:2015-07-29 06:22:06

标签: java multithreading

我有一个巨大的文件,其中有大约100万条记录。 我的要求是从文件中读取记录并具有可配置数量的线程,这些线程可以跨多个线程处理它们。

目前,我正在使用单个线程读取该文件并将其存储到集合中。

如何将集合元素按顺序传递给不同的线程以进行进一步处理?

1 个答案:

答案 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