複数プロセスから同一ファイルに同時書き込み
こないだ問題になった件。となりの同僚の人が書いた再現プログラムを脳内で再現する。
import java.io.*; public class test { public static void main(String[] args) throws IOException { PrintWriter writer = new PrintWriter(new FileWriter("aaa.txt")); PrintWriter writer2 = new PrintWriter(new FileWriter("aaa.txt")); writer.println("writerから1回目の書き込み。"); writer.flush(); writer2.println("writer2から1回目の書き込み。"); writer2.flush(); writer2.println("writer2から2回目の書き込み。"); writer2.flush(); writer.println("writerから2回目の書き込み。"); writer.flush(); writer.close(); writer2.close(); } }
プログラム実行後、aaa.txtの内容はこうなる。
writer2から1回目の書き込み。 writerから2回目の書き込み。
というわけで、複数プロセスから同一ファイルに同時書き込みすると、
内容が混ざったファイルが出来上がる可能性があるということ。
BufferedWriterとか使うと、内部的にflushが行われるので、
再現させるのはかなり難しいかも。
そんな設計にしてはいけませんというのが結論ですね。