gpt4 book ai didi

java - 在 Java 中为文件线程化

转载 作者:行者123 更新时间:2023-11-29 10:07:00 25 4
gpt4 key购买 nike

我想用 Java 读取文件的内容。我有大约 8000 个文件来读取内容并将其保存在 HashMap 中,例如(路径,内容)。我认为使用 Threads 是加快进程的一种选择。据我所知,让所有 8000 个文件在不同的线程中读取它们的内容是不可能的(我们可能想限制线程),对此有何评论?另外,我是 Java 线程的新手,有人可以帮助我了解如何开始使用这个吗?

到目前为止我认为这个伪代码,:

    public class ThreadingTest extends Thread {

public HashMap<String, String > contents = new HashMap<String, String>();


public ThreadingTest(ArrayList<String> paths)
{
for(String s : paths)
{
// paths is paths to files.
// Have threading here for each path going to get contents from a
// file
//Not sure how to limit and start threads here
readFile(s);
Thread t = new Thread();
t.start();
}
}


public String readFile(String path) throws IOException
{
FileReader reader = new FileReader(path);
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(reader);
String line;
while ( (line=br.readLine()) != null) {
sb.append(line);
}

return textOnly;

}

}

对完成线程过程的任何帮助。谢谢

最佳答案

简答:按顺序阅读文件。磁盘 I/O 不能很好地并行化。

长答案:如果磁盘擅长随机访问(SSD 磁盘)或者如果文件放置在多个不同的磁盘上,则线程可能提高读取性能,但如果不是这样,您很可能会以大量缓存未命中而告终,并等待磁盘寻找正确的读取位置。 (即使您的磁盘很擅长随机访问,您仍然可能会在那里结束。)

如果您想测量而不是猜测,请使用 Executors.newFixedThreadPool创建一个可以并行读取文件的 ExecutorService。尝试不同的线程数,但如果每个物理磁盘一个读取器线程可为您提供最佳性能,请不要感到惊讶。

关于java - 在 Java 中为文件线程化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com