gpt4 book ai didi

Java 文件锁定

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:20 25 4
gpt4 key购买 nike

我有几个线程(其中一些由进程 X 生成,其他由进程 Y 生成,等等),每个线程都需要写入一个文件 MyFile .但是,如果Thread T1先开始写入MyFile,那么,当Thread T2开始写入时,需要等待T1释放文件,以便它可以读取写入到 Thread T1 中的内容。换句话说,每个线程都有一个 finalizeThread 方法,如下所示:

private void finalizeThread() {
File f = new File("MyFile.dat");
f.createNewFile(); // atomically creates the file, if it doesn't exist
locked_section {
readContentsFromFile(f); // read contents if some other thread already modified the file
modifyContentsFromFile(f); // modify
writeFile(f); // write, so that new threads can see the content modified by this thread
}
}

我的问题是:如何完成上面代码中的locked_section?我正在查看 FileLock 类,但它在 Javadoc 中说 “文件锁代表整个 Java 虚拟机持有。它们不适合通过以下方式控制对文件的访问同一虚拟机中的多个线程。”

最佳答案

如果文件只能从您的程序访问,同步锁对象是可以的。但是如果你想保护文件在你处理它时不被其他程序更改,你可以使用 Java 的文件锁定功能 java.nio.channels.FileLock (example)。正如文本所说,请注意,在某些操作系统上,如果程序不检查现有文件锁,它们仍然可以更改文件。

关于Java 文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045734/

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