日期:2014-05-20  浏览次数:20668 次

狂怒!哪位达人帮我解决这个写文件的问题!!100分抛
windows下一个进程写文件ok,命令行下同时运行两个进程,总会丢失几条!!
代码如下:
Java code

import java.io.BufferedWriter;
import java.io.PrintWriter;

import java.io.FileWriter;

public class WriteFile {    
    public static void main(String[] args) {
        long times = 3000;
        for (int i = 0; i < times; i++) {
            //write1(Integer.toString(i+1));
            write2(Integer.toString(i+1));
        }
        System.out.println("finished!");
    }

    private static void write1(String content) {
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter("d:\\1.txt", true);
            bw = new BufferedWriter(fw);
            bw.write(content);
            bw.newLine();
            bw.flush();
            bw.close();
            fw.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    
    private static synchronized void write2(String content) {
        FileWriter fw = null;
        PrintWriter pw = null;
        try {
            fw = new FileWriter("d:\\2.txt", true);
            pw = new PrintWriter(fw);
            pw.println(content);
            pw.close();
            fw.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}



------解决方案--------------------
丢失应该是正常的,调用write1和write2方法应该是一样的
这里不存在多线程问题,同步不起作用。

两个不同的进程是独立的,各自运行于一个独立的jvm中。

两个进程同时写一个文件,结果应该依赖于操作系统的文件处理方式。
------解决方案--------------------
没有多线程啊,应该不存在丢失的问题啊
------解决方案--------------------
synchronized本来就是对线程进行同步化,对进程不起作用.
java下面好像没有对进程同步化的控制.
要么你对文件进行加锁,每个线程写的时候加锁,写完解锁.
------解决方案--------------------
同楼上.同步无效,文件被覆盖,解决方案从操作系统入手,文件加锁比较好.
------解决方案--------------------
第一,这个程序与线程无关.
第二,我帮你测试了一下,并没有数据丢失.
------解决方案--------------------
没出现什么问题!!
------解决方案--------------------
因为每个进程都有自己的文件偏移量