2015-11-09 108 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將被創建。
如果整個目錄結構已經存在,則不會創建任何內容,並且(可能最重要)不會引發異常。