Java同步文件写入

Java同步文件写入,java,synchronization,filewriter,Java,Synchronization,Filewriter,我有许多线程写入文件池,我想同步filewriter以避免脏附加 首先我想到了这一点: public synchronized void write(Ing ing) { File file=getFile(ing); FileWriter writer; writer=new FileWriter(file,true); // ... } 但这会同步所有写入操作,我只想同步同一文件上的写入操作。要同步每个文件,似乎可以同步ing变量,该变量包含对文件的引用:

我有许多线程写入文件池,我想同步filewriter以避免脏附加

首先我想到了这一点:

public synchronized void write(Ing ing) {
    File file=getFile(ing);
    FileWriter writer;
    writer=new FileWriter(file,true);
    // ...
}

但这会同步所有写入操作,我只想同步同一文件上的写入操作。

要同步每个文件,似乎可以同步
ing
变量,该变量包含对文件的引用:

public void write(Ing ing) {
    synchronized(ing) {
        File file = getFile(ing);
        FileWriter writer = new FileWriter(file, true);
        ...
    }
}

默认情况下,FileWrite.append()是同步的

查看
Writer.java


“Ing”是来自Dao对象的实体,另一个线程可以获得相同的对象(但不是相同的对象!)并写入相同的文件。我说得对吗?@Tobia如果是这样,那么
getFile()
做什么呢?如果它返回相同的文件对象,也许您可以使用它。是的,当然getFile()会根据路径字符串获取文件对象。另一次,可能有两个不同的文件对象指向同一路径。。。