2015-11-09 2 views
1

У меня есть следующая ситуация: несколько потоков могут попытаться создать одну и ту же папку одновременно, например.Блокировка для создания новой папки

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

... 

Я пытался проверить эту ситуацию несколько раз (создать ту же самую папку, используя несколько Тедаса), и каждый раз был успешным например, я не получил каких-либо проблем. Однако я обеспокоен по поводу такого подхода - я должен синхронизировать этот код или нет e.g.should я использую что-то вроде

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

или я в безопасности только с

directory.mkdir(); 

Спасибо, ура!

+0

@AndyTurner Что делать, если два потока пытаются создать одну и ту же папку одновременно? Может ли это привести к какой-то ошибке? –

+0

OS должен позаботиться об этом – wero

+0

Почему вы используете 'File'? Это 2015 год, используйте java.nio.file – fge

ответ

0

В качестве fge уже упоминается использование API NIO 2 для него.

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

Это создаст каталог \\new\\folder, если каталог \\new не существует.
Если каталог \\new уже существует, тогда будет создана только его подпапка \\folder.
Если вся структура каталогов уже существует, ничего не будет создано и (возможно, самое главное), исключение не будет выбрано.

Смежные вопросы