我在Java中的Linux上的文件锁定有问题
我在不同的主机(A和B)和共享文件夹上有两个应用程序用于文件锁定。
在A中,我被channel.lock()
锁定。
然后我在B中调用channel.tryLock()
。它抛出OverlappingFileLockException
。而且还可以。
但是随后我在A中调用channel.tryLock()
(它抛出OverlappingFileLockException
)。此后,B中的channel.tryLock()
返回有效锁,没有任何异常。
有人有同样的问题吗?谢谢
最佳答案
从Java Doc(方法tryLock()
)
如果由于持有重叠的锁而未能获得锁
另一个程序然后返回null。如果无法获取锁
由于任何其他原因,将引发适当的异常。
这意味着,如果存在其他问题而不是具有锁定功能的应用程序,则tryLock
方法将抛出OverlappingFileLockException
。
如果您是多线程的,您应该知道以下几点:
文件锁代表整个Java虚拟机保留。它们不适用于控制同一虚拟机中的多个线程对文件的访问。
如果您继续阅读有关该异常的信息:
OverlappingFileLockException-如果锁定与请求的重叠
该Java虚拟机已经拥有该区域,或者如果另一个
线程已在此方法中被阻止,并正在尝试锁定
同一文件的重叠区域
因此,我认为您的问题是,您正在尝试从已经拥有一个应用程序的同一个应用程序中获取一个锁。您必须为我检查它,但在这种情况下,它似乎不会返回null
,但会引发异常。
另外:如果您尝试从同一应用程序锁定文件,则文档中没有任何说明。如果其他应用程序已经获得了锁,它总是谈论返回null
:
代表新获取的锁的锁对象;如果
由于另一个程序持有一个
重叠锁
Link to JavaDoc