gpt4 book ai didi

java - 一个JVM可以获取两个共享文件锁吗?

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

如何获取两个共享的 FileLock?我有以下测试代码:

File file = new File(lockDir, "tmp.lock");

file.createNewFile();
FileChannel channel = new RandomAccessFile(file, "r").getChannel();
boolean shared = true;
FileLock lock1 = channel.tryLock(0, Long.MAX_VALUE, shared);
assertTrue(lock1.isValid());
assertTrue(lock1.isShared());

// I get an OverlappingFileLockException here:
FileLock lock2 = channel.tryLock(0, Long.MAX_VALUE, shared);
assertTrue(lock2.isValid());
assertTrue(lock2.isShared());

lock1.release();
lock2.release();

但是即使我在两个不同的线程中执行锁获取,我也会在标记行中得到 OverlappingFileLockException 。或者共享锁只能用于两个不同的进程吗?或者我是否误解了共享,它只是对文件的某些部分进行读写访问(“共享文件资源”)?我真的找不到关于我的用例是否可行的文档。

我希望基于文件的锁定具有与使用 .readLock().writeLock( 的 new ReentrantReadWriteLock() 获得的相同行为) 其中允许多个读锁,但只允许一个写锁。

最佳答案

来自java文档:

tryLock 抛出

OverlappingFileLockException - 如果此 Java 虚拟机已持有与请求区域重叠的锁,或者另一个线程已在此方法中被阻塞并正在尝试锁定重叠区域

编辑:我假设您的情况满足的条件是重叠区域,因为您只创建文件,并且它不包含任何内容

关于java - 一个JVM可以获取两个共享文件锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367887/

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