gpt4 book ai didi

java - 为什么 FileChannel.tryLock 不阻止跨多个进程的访问?

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

Possible Duplicate:
Problem with Java file locking mechanism (FileLock etc)

在下面的代码中,我想测试 FileLock类。

import java.io.File;
import java.nio.channels.*;
import java.nio.MappedByteBuffer;
import java.io.RandomAccessFile;

class test{
File f= new File("./in.txt");
RandomAccessFile in = new RandomAccessFile(f, "rw");
FileChannel fc = in.getChannel();

byte[] t = new byte[20];
in.read(t, 0, 8);
System.out.println(new String(t));

FileLock fl = fc.tryLock(0, 4, false);
if(fl!=null){
System.out.println("the file has been locked");
Thread.sleep(10000);
fl.release();
System.out.println("no lock!");
}
fc.close();
in.close();
}
};

但问题是,当我运行“java test”两次时,第一个应该锁定文件 in.txt,第二个不应访问 in.txt,然后不应在屏幕上打印任何内容。但事实是第二个也将字符串打印在屏幕上,即使它按预期返回。并且从0到第3字节的区域不应该被其他人读取。但事实上并非如此。

但是好像有什么不对劲。如果文件被独占锁定,则其他人无法访问该文件。但好像不是。

最佳答案

FileLock 在 Linux 下不起作用(至少在我上次尝试的 Redhat 下不起作用)。编辑:那不是真的。我做错了:-)

在 Windows Vista/7/8 下,我上次尝试时它可以工作。

也许 Linux 上有文件系统实现可以实现这个功能。您必须使用 [file].lck 临时文件的创建来模拟锁定(尽管 File.create 的文档中不建议这样做)。

如果文件不存在,有一个特殊的原子方法来创建文件

关于java - 为什么 FileChannel.tryLock 不阻止跨多个进程的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266016/

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