rem*_*emo 1 java multithreading
我希望用Java读取文件的内容.我有大约8000个文件来读取内容并将其放在HashMap中(路径,内容).我认为使用Threads可以选择这样做来加快这个过程.据我所知,所有8000个文件都在不同的线程中读取它们的内容是不可能的(我们可能想限制线程),对它有任何意见吗?另外我是Java新手中的新手,有没有人可以帮忙开始这个呢?
到目前为止,我认为这个pesudo代码,:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
完成线程处理的任何帮助.谢谢
简答:按顺序读取文件.磁盘I/O不能很好地并行化.
长答案:如果磁盘擅长随机访问(SSD磁盘)或者文件放在几个不同的磁盘上,则线程可能会提高读取性能,但如果它们不是,那么您很可能最终会遇到很多问题缓存未命中并等待磁盘寻找正确的读取位置.(即使您的磁盘擅长随机访问,您仍可能会在那里结束.)
如果您想测量而不是猜测,请使用Executors.newFixedThreadPool创建一个ExecutorService可以并行读取文件的文件.尝试不同的线程数,但如果每个物理磁盘的一个读取器线程为您提供最佳性能,请不要感到惊讶.
| 归档时间: |
|
| 查看次数: |
3875 次 |
| 最近记录: |