我有一个试图创建目录的线程调用的函数(如果尚未创建)。但是,当线程尝试并行调用此方法时,将不断抛出FileAlreadyExistsException。将此方法设置为synchronized可以解决此问题,但是有更好的方法。在多线程环境中已经创建目录的情况下,创建目录或跳过目录的正确方法是什么?

public void createDir(Path path){
    if (Files.notExists(path)) {
          Files.createDirectory(path);
    }
}

最佳答案

根据doc,“检查和创建”功能已经在Files.createDirectory() 中进行了编码,而是原子的(即,它是线程安全的):



因此,您应该只需要删除多余的存在检查即可:

public void createDir(Path path){
      Files.createDirectory(path);
}

09-10 03:36
查看更多