2015-11-09 69 views
1

我有以下情况:多个线程可能会尝试同时创建相同的文件夹,例如锁定创建新文件夹

Thread 1         Thread 2 
1 new File("\newfolder\").mkdir()   1 new File("\newfolder\").mkdir() 
2           2 

... 

我试图测试这种情况多次(创建使用多个德达斯相同的文件夹),每一次成功e.g,我没有任何问题。 不过,我很担心这种做法 - 我应该同步的代码或不e.g.should我使用类似

try { 
      folderCreationLock.lock(); 
      File directory = new File(directoryPath); 
      if (!directory.exists()) { 
       directory.mkdir(); 
      } 
     } finally { 
      folderCreationLock.unlock(); 
     } 
    } 

还是我安全只

directory.mkdir(); 

感谢,干杯!

+0

@AndyTurner如果两个线程正在尝试同时创建相同的文件夹,该怎么办?它会导致某种错误? –

+0

操作系统应该照顾这个 – wero

+0

为什么你使用'文件'?这是2015年,使用java.nio.file – fge

回答

0

由于fge已经提到使用它的NIO 2 API。

Files.createDirectories(Paths.get("\\new\\folder")); 

这将创建目录\\new\\folder如果目录\\new不存在。
如果目录\\new已经存在,那么只有它的子文件夹\\folder将被创建。
如果整个目录结构已经存在,则不会创建任何内容,并且(可能最重要)不会引发异常。