锁定以创建新文件夹

时间:2015-11-09 10:39:51

标签: java io

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

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

...

我尝试多次测试这种情况(使用多个thedas创建相同的文件夹)并且每次都成功,例如,我没有遇到任何问题。 但是我担心这种方法 - 我是否应该同步这个代码,例如我应该使用像

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

或者我只是

安全
   directory.mkdir();

谢谢,干杯!

1 个答案:

答案 0 :(得分:0)

正如fge已提及使用NIO 2 API。

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

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