java如何用多线程扫描目录
我有一个单线程的目录扫描程序。扫描文件时,我必须读取属性信息并将其插入数据库
我有两个问题。为了提高性能:
- 如何使用多线程扫描?(扫描安卓手机sd卡)
- 如何优化批量插入到数据库李>
下面是代码列表:
void scan() {
File file = new File("/mnt/sdcard");
fun(file);
}
void fun(File file) {
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
// read attribute information and insert to db
return;
} else {
File[] arr = file.listFiles();
for (int i = 0; i < arr.length; i++) {
fun(arr[i]);
}
}
}
# 1 楼答案
是的,您可以使用多线程提高性能,一个线程进行磁盘I/O,另一个线程进行网络I/O,我将编写一个小示例
下面是一个示例,最好在睡觉前阅读:)使用类
ReadThenAll(5);
的构造函数创建5个线程来浏览文件夹和子文件夹。玩得开心# 2 楼答案
我认为使用多线程在这里没有帮助。扫描目录是有IO限制的。即使使用多线程,它们都将在工作线程中等待IO操作完成。因此,任何时候都只有一个线程扫描
除非您的目录上的IO操作可以并行化,例如多个磁盘,否则它将有所帮助
# 3 楼答案
你可以按照下面的一个设计