多线程环境中的BufferedReader

时间:2010-04-27 08:47:39

标签: java multithreading io

如何通过多个线程同时从BufferedReader读取。

2 个答案:

答案 0 :(得分:6)

好吧,你将无法让实际同时执行阅读。但是,您可以:

  • 同步一个锁上的所有读取,这样一次只有一个线程尝试读取,但最终都可以读取
  • 让一个线程只是读取,并使其填充某种线程安全队列(请参阅java.util.concurrent以获取各种选项),其他线程从中获取项目。

您想一次读取行还是任意字符块?

答案 1 :(得分:0)

如果所有线程都要读取文件中的所有行,那么您应该为每个线程创建一个单独的缓冲读取器。如果每个线程一次处理一行(并且行的顺序无关紧要),那么您应该使用生产者/消费者模型,其中只有一个线程实际从文件中读取并将工作负载放在{{ 3}},而其他线程定期删除工作负载并处理它们。请注意,如果将N行读入列表,则可以重置锁定开销,然后将列表放入阻塞队列,而不是将每条单独的行直接放入阻塞队列,因为这样可以读取多行/通过单个同步操作提取...将每一行直接放入/移出队列将是非常低效的,特别是如果处理它们相当快。