gpt4 book ai didi

java - 如何使用多线程处理存储在本地磁盘中的大量文件(使用文件锁)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:52 26 4
gpt4 key购买 nike

java中如何使用多线程处理本地磁盘目录下存储的大量文件(使用文件锁)

最佳答案

您不想并行读取文件(磁盘 I/O 不能很好地并行化)。最好让单个线程读取文件,将内容发送给工作线程进行并行处理,然后从工作线程收集结果。使用来自 java.util.concurrent 的出色的 ExecutorService 和 c:o 可以让您省去线程处理的繁琐细节,并使您的解决方案更加灵活。

这是一个简单的例子。假设 Foo 是处理文件的结果:

public List<Foo> processFiles(Iterable<File> files){
List<Future<Foo>> futures = new ArrayList<Future<Foo>>();
ExecutorService exec = Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors());
for (File f : files){
final byte[] bytes = readAllBytes(f); // defined elsewhere
futures.add(exec.submit(new Callable<Foo>(){
public Foo call(){
InputStream in = new ByteArrayInputStream(bytes);
// Read a Foo object from "in" and return it
}
}));
}
List<Foo> foos = new List<Foo>(futures.size());
for (Future<Foo> f : futures) foos.add(f.get());
exec.shutdown();
return foos;
}

TODO:添加异常处理等。您可能还想在 processFiles 之外实例化 ExecutorService,以便在调用之间重用它。

关于java - 如何使用多线程处理存储在本地磁盘中的大量文件(使用文件锁),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1442720/

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