0
A
回答
3
我建议你一个线程执行全部看完,然后把线变成生产者/消费者队列(例如LinkedBlockingQueue
) - 那么你可以有多个线程维护该队列作为消费者。
你真的不希望多个线程在这里执行IO - 即使你有多个独立的BufferedReaders
,如果你从传统磁盘读取,你不想最终在多个地方寻找。生产者/消费者队列相当简单地将读取与处理分开 - 并且更容易单独测试每个部分。
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();
}
}
0
我对你想什么来实现,但不知道你将如何编写它的想法。 如果你可以让每个线程在不同的线上工作,那么线程不会发生冲突。 我的意思是让thread1从1读到100,thread2从101读到200等等。 最后加入所有线程的结果以获得最终结果。 也许叉/联合操作。
但是@Jon评论让我不敢采取这样的做法。
“你真的不想多线程执行此IO - 即使你有多个独立的BufferedReaders,如果你从传统的磁盘读取你不希望最终在多个地方寻找..
相关问题
- 1. Java缓冲读取器读取
- 2. AWS Lambda - 缓冲读取器
- 3. 多标记()缓冲读取器
- 4. Java缓冲读取器,逐行阅读
- 5. 读取TCP缓冲
- 6. 如何完全停止包含缓冲读取器的线程?
- 7. 用缓冲读取器读取随机访问文件
- 8. 多次读取txt
- 9. 读取输入文件的缓冲区读取器代码
- 10. 读取字符串缓冲读取器的所有行
- 11. 缓冲读写器线程安全吗?
- 12. 套接字通过缓冲读取器读取,不接收线上
- 13. 测试从输入流中读取缓冲读取器
- 14. 如何从缓冲读取器读取前五个字符?
- 15. 无法从缓冲读取器读取android
- 16. 我应该如何从缓冲读取器读取数据?
- 17. 从golang中缓冲读取器读取特定字节数
- 18. 从缓冲区读取C
- 19. Java - 缓冲区读取
- 20. FileStream.Seek与缓冲读取
- 21. 未读取uart缓冲区
- 22. C++缓冲文件读取
- 23. boost asio读取缓冲区
- 24. 读取缓冲区C++
- 25. 从磁盘缓冲读取
- 26. 行缓冲读取在Perl
- 27. 使用扫描仪/读取器/缓冲读取器读取文本文件以读取.txt文件中的数字
- 28. 在JSP中显示缓冲读取器
- 29. Java语法错误缓冲读取器
- 30. Tokenizing问题与缓冲读取器
让每个线程跳过* x *行,其中* x *是线程的数量;或者只是使用一个共享的'Scanner/FileReader/StringReader'并调用'nextLine()'或类似的。确保锁定每个'Scanner'当你读一行时,你不会同时遇到两次读取访问。 – GiantTree
有点题外话:你为什么认为使这个多线程更快? – MadConan
你的代码将被I/O绑定,而不是CPU所以多线程不会提高性能。 – Raedwald