gpt4 book ai didi

java - 这两个java.io.File线程安全问题是否被规避了?

转载 作者:行者123 更新时间:2023-12-01 18:27:58 25 4
gpt4 key购买 nike

假设 Win32FileSystembeginMultiThreading 在共享 MultiThreadingClass 对象上同时运行多次,最可能导致数据争用或其他线程的方式是什么问题?我知道这可能不是线程安全的,因为 (1) setPath 的参数被重用。我还看到 (2) path 不是 java.io.File 中的最终变量。但是,我似乎找不到该代码可能因线程问题而自行出错的部分。

public class MultiThreadingClass {
private Holder h = new Holder();
private String path ="c:\\somepath";
public void beginMultiThreading(){
h.setPath(new File(path));
h.begin();
}
}

public class Holder {
private File path;
public void setPath(File path){
this.path = path;
}
public void begin(){
System.out.println(path.getCanonicalPath()+"some string");
}
}

最佳答案

正如 @Duncan 所说,代码当前是线程安全的。但此时它不执行任何文件写入操作。当您使用 File 对象时,我期望您将处理文件。一旦开始写入文件,还有进一步的考虑:

  • 从多个线程写入单个文件需要同步。据我所知,这不是“开箱即用”的功能。
  • 从不同的 JVM 甚至同一 JVM 中的不同类加载器写入同一文件要困难得多。 (对于大多数 Web 框架,从多个 Web 应用程序写入日志文件是从不同类加载器写入单个文件的示例)。您又回到使用锁定文件或某种特定于平台的互斥锁。

警告:我已经有一段时间没有这样做了,所以最新的 Java 并发包或 NIO 包中可能有更多支持,其他人可以扩展。

关于java - 这两个java.io.File线程安全问题是否被规避了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25359084/

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