java.io.File构造函数行为或多线程问题?

时间:2017-06-17 15:08:58

标签: java multithreading file

我有以下代码:

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

无法弄清楚发生了什么

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是保持filePath仍然不可变。你会发现如果你改变这一行:

filePath = filePath + id + "_" + date;

以下内容:

String tempFilePath = filePath + id + "_" + date;

并在tempFilePath而不是filePath上运行,您的代码将变为线程安全并按预期工作。