我使用以下方法在文件上创建锁,以便我可以独占地进行编辑:
File file = new File(filename);
channel = new RandomAccessFile(file, "rw").getChannel();
lock = channel.tryLock();
现在我有第二个线程想要访问同一个文件 - 只是读取,不编辑。我该怎么做?现在第二个线程将抛出一个IO异常并通知我文件被锁定。
这可行吗?有什么建议吗?谢谢。
或许这可以帮助你!
public abstract FileLock tryLock(long position,
long size,
boolean shared)
throws IOException
tryLock()
方法仅锁定大小为 Long.MAX_VALUE
的区域。IllegalArgumentException
- 如果参数的先决条件不成立
ClosedChannelException
- 如果此通道已关闭
OverlappingFileLockException
- 如果该 Java 虚拟机已经持有重叠所请求的锁或者如果另一个线程已经在此方法中阻塞并且正在尝试锁定同一文件的重叠区域
IOException
- 如果发生其他 I/O 错误
参见:
lock()
, lock(long,long,boolean)
, tryLock()