Java 如何使递归调用(GetTotalFile)线程安全?

Java 如何使递归调用(GetTotalFile)线程安全?,java,Java,我正在做一个递归文件检查,问题是我不能在方法本身内部有计数器,所以我在外部声明了它。但问题是,这不是线程安全的 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(

我正在做一个递归文件检查,问题是我不能在方法本身内部有计数器,所以我在外部声明了它。但问题是,这不是线程安全的

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);
    }
}

我不明白为什么countFiles应该是类级变量。通过将countFiles设置为局部变量(该变量无论如何由方法返回),可以使代码具有线程安全性

嗯,您使用或查找同步了吗?换句话说,目录中文件的深度计数是目录中文件的总和加上目录中每个目录的深度计数。是的,您需要返回递归的结果,它解决了问题,。