用于读取.txt的多线程BufferedReader

时间:2015-05-11 13:22:17

标签: java multithreading bufferedreader

我想读取.txt的行来执行任务,然后继续下一行。

为了使程序更快,我想要多线程,所以每个线程都尝试一行。

问题是,我不希望线程1尝试与线程2相同的行。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我建议您使用一个线程进行所有读取,然后将这些行放入生产者/消费者队列(例如LinkedBlockingQueue) - 然后您可以为该队列提供多个线程作为消费者。

你真的不希望多个线程在这里执行IO - 即使你有多个独立的BufferedReaders,如果你从传统的磁盘中读取你不想在多个地方寻找。生产者/消费者队列非常简单地将读数与处理分开 - 并且更容易单独测试每个部分。

答案 1 :(得分:0)

您可以在一个线程中读取行并为每一行分派一个工作线程:

try (BufferedReader reader = new BufferedReader(new FileReader("my.txt"))) {
   String line;
   while ((line = reader.readLine()) != null) {
     new Runnable() {
        void run() {
           // do stuff with line
        }
     }.run();
   }
}

答案 2 :(得分:0)

我对您要实现的目标有所了解,但不确定如何编写代码。 如果你可以使每个线程在不同的行集上工作,那么线程就不会发生冲突。 我的意思是让thread1从1读取到100,thread2从101读取到200,依此类推。 最后,加入所有线程的结果以获得最终结果。 也许是Fork / Join操作。

但@Jon评论让我对遵循这样的方法持谨慎态度。

“你真的不希望多个线程在这里执行IO - 即使你有多个独立的BufferedReader,如果你正在阅读传统的磁盘,你不想最终在多个地方寻找..