我目前编写我的程序使用32个线程并读取每个线程1个文件(所以32个.txt文件)。多线程与CPU速度无关,但每秒32次调用BING的api要比制作1快得多。每个.txt文件都包含一个搜索查询列表。我创建一个线程,它从文件中一次读取一行。是否有可能创建所有32个线程并将它们指向一个.txt文件?Java多线程应用程序读取单个文件
回答
使用生产者 - 消费者模式。只有一个线程读取文件,并使用put()
将每行/命令推入ArrayBlockingQueue(线程安全读写)。
所有其他32个线程都应通过调用take()
从同一队列对象读取。如果队列是空的,它们会阻塞,这很好。
该解决方案更好,因为磁盘本质上是单线程的,因此您不会通过同时读取文件获得太多收益。
谢谢,这使得改变输入比有32个单独的文件更容易。 – chrstahl89
您可以同步处理文件的代码。每次您写入您打开的文件,写入并关闭它。使用监视器来实现,它应该没问题。
也可以使用java util日志,因为它是线程安全的。如果你实现一个处理程序,那么记录API应该关注线程安全问题。
这个问题没有涉及任何文字,这与日志记录没有关系。 –
这取决于这些线程是如何实现的。如果每个文件都有自己的阅读器或输入流,那么并发阅读可能不是什么大问题。除非操作系统上的JVM实现在打开输入流时隐式锁定文件,并且锁不能跨流共享。
但是你会做很多不必要的工作,说实话。将对文件的访问封装在一个单独的类中并将其实例传递给线程会更好,然后让该类执行必要的并发处理。
- 1. 用Java读取多线程文件
- 2. 用多线程读取单个文件:应该加快速度?
- 3. 多线程读取Java中的文件
- 4. 多线程文件读取
- 5. 多线程文件读取
- 6. 多线程读取文件
- 7. Python:多个文件的线程读取
- 8. 使用多线程读取文件
- 9. 使用多线程读取30GB文件
- 10. 从Linux上的单个文件夹读取多个线程
- 11. 从python中的多个线程读取单个文件
- 12. 阅读单个大文件的Java多线程
- 13. 读取大文本文件多线程?
- 14. 使用多线程来读取使用Java的文件/处理?
- 15. Java的临时文件多线程应用程序
- 16. Java中的多线程应用程序?
- 17. 分析多线程Java应用程序
- 18. Java单线程聊天应用程序
- 19. 读取使用多线程Java中
- 20. 多线程,读取多个文件并写入新文件
- 21. 读取多个线程
- 22. 在java中使用多线程读取txt文件
- 23. 使用PHP Pthread同时读取多个CSV文件(多线程)
- 24. 通过多线程读取文件
- 25. 多线程文件读取python
- 26. 多线程读取随机文件
- 27. Java程序读取文本文件
- 28. java编程和java单线程多线程问题(单线程与多线程)
- 29. 多线程JAVA应用程序中的套接字读取问题
- 30. 线程Java应用程序
我正在解析大文本文件,我通常这样做:一个生产者正在做I/O,然后放入一个队列,然后尽可能多的消费者,因为我想从队列中获取作业。在你的情况下,你的唯一生产者可以读取txt文件并在队列中放入每行一个条目。 – TacticalCoder