Java Executor Service,在完成所有任务后停止

时间:2017-03-06 20:14:40

标签: java multithreading service pool executor

我有一个线程池来浏览特定驱动器的所有文件。问题是我的过程永远不会结束。

这是我的代码:

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中,我该如何关闭服务?

0 个答案:

没有答案