哪个线程正在使用文件

时间:2012-10-09 09:21:03

标签: java multithreading file

写作后我正在写文件和关闭流。最后我要删除文件。 但是程序执行完成后我仍然可以找到文件。它的多线程环境。

那么可以检查它正被哪个函数或哪个线程使用?

更新了代码:

 File p_file = new File("C:\\", "GUID");
 p_file.createNewFile();

 FileOutputStream fos = null;
try {
  fos = new FileOutputStream(p_file);
  fos.write("This is test msg.".getBytes());
} finally {
  try {
         fos.close();
      } catch (IOException e) {
                e.printStackTrace();
      }
      if(p_file.exists())
   System.out.println(p_file.delete());
}
}

由于

2 个答案:

答案 0 :(得分:1)

在Linux / Unix环境中lsof是你的朋友。对于Windows Process Explorer可以帮助您找到保存文件句柄的进程。

答案 1 :(得分:0)

如果我理解正确,那么代码的和平就会被许多线程同时执行。 在这种情况下,许多线程可以同时创建,打开,删除同一文件,即一个线程当前正在写入文件,第二个线程尝试删除该文件。然后可能会发生删除文件的操作失败。

要防止对同一文件的并发访问,您可以同步代码(请参阅synchronize关键字),也可以生成单独的唯一文件名,例如查看this question的答案。