Java 多个RandomAccessFile对象能否将数据写入同一文件?

Java 多个RandomAccessFile对象能否将数据写入同一文件?,java,multithreading,file-io,randomaccessfile,Java,Multithreading,File Io,Randomaccessfile,在我的代码中,每个线程通过各自的RandomAccessFile对象将数据写入同一个文件。这需要同步吗?对不起,我的英语很差 多个RandomAccessFile对象能否将数据写入同一文件 是的,我们在《编年史》的图书馆里这样做 通过内存映射文件在JVM之间共享 还通过内存映射文件在JVM之间共享 在我的代码中,每个线程通过各自的RandomAccessFile对象将数据写入同一个文件。这需要同步吗 您仍然需要担心线程安全性synchronized或Lock将起作用,但是,这在JVM中不起作

在我的代码中,每个线程通过各自的RandomAccessFile对象将数据写入同一个文件。这需要同步吗?对不起,我的英语很差

多个RandomAccessFile对象能否将数据写入同一文件

是的,我们在《编年史》的图书馆里这样做

  • 通过内存映射文件在JVM之间共享
  • 还通过内存映射文件在JVM之间共享
在我的代码中,每个线程通过各自的RandomAccessFile对象将数据写入同一个文件。这需要同步吗


您仍然需要担心线程安全性
synchronized
Lock
将起作用,但是,这在JVM中不起作用。如果有多个JVM,则需要使用低级别堆外线程安全操作的共享锁。(这是我们所做的,因为它是最快的选项)

需要同步=否(您的问题指出每个线程都有自己的RandomAccessFile实例,因此同步问题将出现在磁盘上,而不是内存中)。这可能根据操作系统的不同而有所不同。但是,线程之间不相互覆盖的责任将由程序员(=您)承担。@Jack只是为了添加Peter关于多个JVM访问同一文件的回答,API提供了必要的锁定机制。@Madhusudanareddysunapu我想补充一点,FileLock使用系统调用。
 public class WriteThread extends Thread{

        @Override
        public void run() {
            RandomAccessFile randomAccessFile = new RandomAccessFile(fileName, "rwd");
            randomAccessFile.seek(threadPosition);
            byte[] buffer = new byte[1024 * 8];
            randomAccessFile.write(buffer, 0, threadLength);
        }
    }