Java 多线程使用的随机访问文件

Java 多线程使用的随机访问文件,java,multithreading,randomaccessfile,Java,Multithreading,Randomaccessfile,我有许多线程都在读取(只是读取)同一个文件。 在每个线程中,我实例化一个RandomAccessFile,然后使用Seek并尝试读取一个字节块。问题是我越来越 java.lang.RuntimeException: java.nio.channels.OverlappingFileLockException 是否仍然使用Java并发访问同一文件 还是最好创建一个层来访问文件?您可以发布一些正在使用的代码吗?虽然它可能不会阻止对象锁定文件,但我想到的是,以这样的方式声明RandomAccessF

我有许多线程都在读取(只是读取)同一个文件。
在每个线程中,我实例化一个
RandomAccessFile
,然后使用Seek并尝试读取一个字节块。问题是我越来越

java.lang.RuntimeException: java.nio.channels.OverlappingFileLockException
是否仍然使用Java并发访问同一文件


还是最好创建一个层来访问文件?

您可以发布一些正在使用的代码吗?虽然它可能不会阻止对象锁定文件,但我想到的是,以这样的方式声明
RandomAccessFile
随机访问文件:
RandomAccessFile()文件=新的RandomAccessFile(文件名,“r”)错误,当然,不要试图创建重叠锁。但是为什么要创建锁呢?它们不会相互保护线程。而且,您只是在读取文件,锁似乎是多余的。为什么要将异常包装在
RuntimeException
中?伙计们,对不起!该异常由级别DB抛出。我在多线程环境中错误地使用了leveldb::DB。我认为最好关闭这个线程。你能发布一些你正在使用的代码吗?虽然它可能不会阻止对象锁定文件,但我想到的是,以这样的方式声明
RandomAccessFile
随机访问文件:
RandomAccessFile()文件=新的RandomAccessFile(文件名,“r”)错误,当然,不要试图创建重叠锁。但是为什么要创建锁呢?它们不会相互保护线程。而且,您只是在读取文件,锁似乎是多余的。为什么要将异常包装在
RuntimeException
中?伙计们,对不起!该异常由级别DB抛出。我在多线程环境中错误地使用了leveldb::DB。我认为最好把这条线合上。