我有以下代码:
class Abcd{
//wired by spring to give the directory filePath ="/var/tmp/"
private String filePath;
public void myMethod(String id, String date){
filePath= filePath+ id+ "_" + date;
File f = new File(filePath);
if(f.exists){//Do something}
else{
System.out.println("File not found at file path:"+filePath);
}
}
}
上面的代码表现得很奇怪,间歇性地,filePath包含目录/ var / tmp /的所有文件。因此,如果/ var / tmp目录包含两个名为" id1_01012017"和" id2_10102017"。
这是间歇性输出
在文件路径找不到文件:/ var / tmp / id1_01012017id2_10102017
无法弄清楚发生了什么
答案 0 :(得分:1)
执行此操作的最佳方法是保持filePath
仍然不可变。你会发现如果你改变这一行:
filePath = filePath + id + "_" + date;
以下内容:
String tempFilePath = filePath + id + "_" + date;
并在tempFilePath
而不是filePath
上运行,您的代码将变为线程安全并按预期工作。