gpt4 book ai didi

java - Java中线程安全的创建和删除文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:57 28 4
gpt4 key购买 nike

Files.createFile() 和 Files.delete() 方法线程安全吗?我在文档中读到 createFile() 始终是原子操作,但 delete() 不是。我是否应该以某种方式同步我的 Java 应用程序中的这些 block 以及如何同步?原子操作对于多线程任务意味着什么?

最佳答案

a。原子操作对于多线程任务意味着什么?

在多线程原子性上下文中,线程能够以某种方式执行任务,以便其他线程在该线程执行该任务时对该任务的状态变量没有明显的副作用。

File.createNewFile() :- 对于此方法,当线程即将执行此方法时,状态是文件存在或不存在。假设当线程执行此方法时,文件不存在。现在假设此方法需要 5 毫秒的时间来执行和创建文件。因此,根据原子性的概念,在这 5 毫秒内,其他线程不应该能够创建相同的文件(之前不存在),否则该线程关于文件状态的第一个假设将发生变化,从而改变输出。

因此,在这种情况下,执行线程通过获取要创建文件的目录的写锁来实现此目的。

Files.delete():- 此方法的 Java 文档说

this method may not be atomic with respect to other file system operations. If the file is a symbolic link, then the symbolic link itself, not the final target of the link, is deleted.

上面的语句表明此操作也是原子操作,但如果在符号链接(symbolic link)上调用此方法,则会删除链接而不是文件。这意味着原始文件存在,并且其他线程对该文件的文件系统操作是可行的。

要确定文件是否是符号链接(symbolic link),请参阅引用资料:- determine symlink

b.我是否应该以某种方式同步我的 Java 应用程序中的这些 block 以及如何同步?

在这两种情况下,您都不需要处理任何多线程场景。但是,您可以使用上面链接中提到的方法来确定符号链接(symbolic link)并根据需要单独处理。但您端肯定不需要同步。

关于java - Java中线程安全的创建和删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906523/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com