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

时间:2012-03-09 03:14:31

标签: 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()) {
            countFiles++;
        }
        if (f.isDirectory()) {
            getTotalFiles(f.getAbsolutePath());
        }
    }

    return countFiles;
}

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

我没有看到为什么countFiles应该是这里的类级别变量的任何明确原因。通过使countFiles成为局部变量,无论如何由方法返回,都可以使代码成为线程安全的。