我有一个小方法,应该计算目录的大小:
private static long getDirSize(File srcDir) {
if (srcDir.isFile()) {
sum += srcDir.length();
} else {
for (File curFile : srcDir.listFiles()) {
getDirSize(curFile);
}
}
return sum;
}
sum
是一个类变量。
每当我的程序跳过if
语句时,sum
都会增加其值。我尝试在sum +=
行设置断点,但即使sum
的值增加,执行也永远不会停止。
如果我删除了sum +=
行,那么sum
永远不会改变,所以我确信这一行是sum
增加的地方。
可能会发生什么?
答案 0 :(得分:3)
也许另一个线程正在搞乱那个变量。通过一个非常简单的更改,您可以使这个线程安全,并恢复你的理智:
private static long getDirSize(File srcDir) {
long sum = 0;
if (srcDir.isFile()) {
sum += srcDir.length();
} else {
for (File curFile : srcDir.listFiles()) {
sum += getDirSize(curFile);
}
}
return sum;
}