我正在进行递归文件检查,问题是我无法在方法本身内部拥有计数器,因此我在外部声明了它。但是问题是,这不是线程安全的。

private int countFiles = 0;
private int getTotalFiles(String path) {

    File file = new File(path);
    File listFile[] = file.listFiles();

    for (File f : listFile) {
        if (f.isFile()) {
            countFiles++;
        }
        if (f.isDirectory()) {
            getTotalFiles(f.getAbsolutePath());
        }
    }

    return countFiles;
}

类变量countFiles不是线程安全的。如何使此线程安全?

最佳答案

您不需要字段,只需将递归调用的结果添加到countFiles即可。

private int getTotalFiles(String path) {
    //...
    if (f.isFile()) {
        countFiles++;
    }
    if (f.isDirectory()) {
        countFiles += getTotalFiles(path);
    }
}

08-04 13:56