读取单个文件的Javamultithreading应用程序

我目前编写的程序使用32个线程并为每个线程读取1个文件(因此32个.txt文件)。 multithreading与CPU速度无关,但每秒对BING的api进行32次调用比制作1.每个.txt文件包含搜索查询列表要快得多。 我创建一个线程,它从文件中一次读取一行。 是否可以创建所有32个线程并将它们指向单个.txt文件?

使用Producer-Consumer模式。 只有一个线程读取文件并使用put()将每个行/命令推送到ArrayBlockingQueue (线程安全读写put()

所有其他32个线程应通过调用take()从同一队列对象中读取。 如果队列为空,它们将阻塞,这很好。

这个解决方案更好,因为磁盘本质上是单线程的,所以你不会通过同时读取文件来获得太多。

您可以同步处理该文件的代码。 每次写入打开的文件,写入并关闭它。 使用监视器实现它应该没问题。

也可以使用java util logging,因为它是线程安全的。 如果您实现了一个处理程序,那么记录api应该处理线程安全问题。

这取决于这些线程的实现方式。 如果每个文件都有自己的读取器或输入流,那么并发读取可能不是什么大问题。 除非操作系统上的JVM实现在其上打开输入流时隐式锁定文件,并且不能跨流共享锁。

但说实话,你会做很多不必要的工作。 最好将对文件的访问封装在一个单独的类中,并将其实例传递给您的线程,然后让该类进行必要的并发处理。