【问题标题】:File.rename() in Java - is it an atomic operation? [duplicate]Java 中的 File.rename() - 它是原子操作吗? [复制]
【发布时间】:2011-05-24 15:21:10
【问题描述】:

可能重复:
How to atomically rename a file in Java, even if the dest file already exists?

我正在处理一个可能在工作中被杀死的进程。我想重命名一个文件。 Java的重命名操作是原子操作吗?

我对 Linux、HP-UX、Solaris 和 AIX 的案例感兴趣。

【问题讨论】:

  • 也许这个问题可以帮到你:stackoverflow.com/questions/595631/…
  • 但是进程被杀死的场景呢?
  • @Marcelo:看起来另一个问题是关于通过重命名覆盖的;这个问的是普通的重命名。

标签: java linux unix file-rename atomic


【解决方案1】:

Rename 操作可能是原子的,也可能不是原子的,它可能成功也可能不成功 如果目标名称下已经存在文件或目录。在 Unix 上,两个单独的操作 必须执行。首先必须测试目标名称下是否存在文件。然后,如果不存在这样的文件,则可以继续将源文件重命名为目标名称。在这两个操作之间,可能会在目标名称下创建一个新文件,并且因为 rename() 系统调用是原子的并且会破坏目标,所以这个新文件将被删除。

【讨论】:

    【解决方案2】:

    没有。

    至少因为 VM 可能在它离开你的代码之后(在你输入 File.rename() 之后)并且在 File.rename() 代码开始运行之前被杀死。

    【讨论】:

    • 抱歉,我回答错了问题。我相信它应该是操作系统的属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2016-11-05
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多