我有一个线程池来浏览特定驱动器的所有文件。问题是我的过程永远不会结束。
这是我的代码:
private static ExecutorService service = Executors.newFixedThreadPool(250);
private static ArrayList<File> files = new ArrayList<>();
private static int count = 0;
public static void main(String[] args) throws InterruptedException {
long before = currentTimeMillis();
service.execute(() -> countFiles(new File("C://")));
service.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
System.out.println((currentTimeMillis() - before) / 1000.0 + ", " + count);
}
public static void countFiles(File folder) {
try {
if (!folder.exists()) return;
if (folder.getName().startsWith("$")) return;
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
service.execute(() -> countFiles(file));
} else {
files.add(file);
count++;
}
}
} catch (Exception e) {
return;
}
}
我尝试将service.shutdown();
放在service.awaitTermination(...);
之前,但它阻止了新的执行。
如果我的所有文件都存储在ArrayList中,我该如何关闭服务?