我有以下情况:多个线程可能会尝试同时创建相同的文件夹,例如。
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();
谢谢,干杯!
答案 0 :(得分:0)
正如fge
已提及使用NIO 2 API。
Files.createDirectories(Paths.get("\\new\\folder"));
如果目录\\new\\folder
不存在,这将创建目录\\new
。
如果目录\\new
已经存在,那么将只创建它的子文件夹\\folder
。
如果整个目录结构已经存在,则不会创建任何内容,并且(可能最重要的是)不会抛出任何异常。