狂怒!哪位达人帮小弟我解决这个写文件的有关问题!100分抛
狂怒!哪位达人帮我解决这个写文件的问题!!100分抛
windows下一个进程写文件ok,命令行下同时运行两个进程,总会丢失几条!!
代码如下:
------解决方案--------------------
丢失应该是正常的,调用write1和write2方法应该是一样的
这里不存在多线程问题,同步不起作用。
两个不同的进程是独立的,各自运行于一个独立的jvm中。
两个进程同时写一个文件,结果应该依赖于操作系统的文件处理方式。
------解决方案--------------------
没有多线程啊,应该不存在丢失的问题啊
------解决方案--------------------
synchronized本来就是对线程进行同步化,对进程不起作用.
java下面好像没有对进程同步化的控制.
要么你对文件进行加锁,每个线程写的时候加锁,写完解锁.
------解决方案--------------------
同楼上.同步无效,文件被覆盖,解决方案从操作系统入手,文件加锁比较好.
------解决方案--------------------
第一,这个程序与线程无关.
第二,我帮你测试了一下,并没有数据丢失.
------解决方案--------------------
没出现什么问题!!
------解决方案--------------------
因为每个进程都有自己的文件偏移量
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下面好像没有对进程同步化的控制.
要么你对文件进行加锁,每个线程写的时候加锁,写完解锁.
------解决方案--------------------
同楼上.同步无效,文件被覆盖,解决方案从操作系统入手,文件加锁比较好.
------解决方案--------------------
第一,这个程序与线程无关.
第二,我帮你测试了一下,并没有数据丢失.
------解决方案--------------------
没出现什么问题!!
------解决方案--------------------
因为每个进程都有自己的文件偏移量