我正在进行递归文件检查,问题是我不能在方法本身内有计数器,所以我在外面声明它。但问题是,这不是线程安全的。
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不是线程安全的。如何使这个线程安全?
答案 0 :(得分:8)
您不需要字段,只需将递归调用的结果添加到countFiles
。
private int getTotalFiles(String path) {
//...
if (f.isFile()) {
countFiles++;
}
if (f.isDirectory()) {
countFiles += getTotalFiles(path);
}
}
答案 1 :(得分:3)
我没有看到为什么countFiles应该是这里的类级别变量的任何明确原因。通过使countFiles成为局部变量,无论如何由方法返回,都可以使代码成为线程安全的。