测试:
http://topic.csdn.net/u/20120803/10/6f16d665-4d2c-4ccb-8d16-74db1f36ed27?seed=1303139503&r=79321454#r_79321454
这个帖子发现了上述的问题。
我调试的时候稍微修改了一下,主要是在buff.write(str);后面加了一句:System.out.println("str is "+str);
发现题目所描述的问题。
代码如下:
- Java code
import java.io.*;public class ThreadFight0 implements Runnable{ public void run() { long a = System.currentTimeMillis(); int i = 0; BufferedWriter buff = null; try { buff = new BufferedWriter(new FileWriter("d:\\logm2.txt")); } catch (IOException e1) { e1.printStackTrace(); } while (System.currentTimeMillis() - a <= 50) { try { String str = Thread.currentThread().toString() + i++; buff.write(str); System.out.println("str is "+str); buff.write("\r\n"); buff.flush(); } catch (IOException e) { e.printStackTrace(); } } try { buff.close(); System.err.println("OVER, and i is " + i); } catch (IOException e) { e.printStackTrace(); } } public static void main1(String[] args) { ThreadFight0 fight = new ThreadFight0(); Thread thread = new Thread(fight); thread.start(); } public static void main2(String[] args) { ThreadFight0 fight = new ThreadFight0(); ThreadFight0 fight2 = new ThreadFight0(); Thread thread2 = new Thread(fight2); Thread thread = new Thread(fight); thread.start(); thread2.start(); } public static void main(String[] args) { //main1(args); main2(args); }}
------解决方案--------------------------------------------------------
写入到文件的不受影响。
每次都是buff.write(str);写进去的,i都是不同的,依次递增。
------解决方案--------------------------------------------------------
我觉得应该是那个文件被一个线程占用的时候,另外一个线程就写不进去,要等这个线程执行完后,另外一个线程才能写进去,
------解决方案--------------------------------------------------------
有两个线程:一个Thread[Thread-0,5,main] 还一个Thread[Thread-1,5,main]
两个线程是并发的,这两个排列的顺序是随机的,所以有时一个在前,一个在后。
但是,你输出到文件的时候,Thread[Thread-0,5,main]1和Thread[Thread-1,5,main]1
是一样的,也就是说后者会覆盖前者的内容。
比如:先输入了Thread[Thread-0,5,main]1
后输入了Thread[Thread-1,5,main]1
则Thread[Thread-1,5,main]1覆盖了之前的Thread[Thread-0,5,main]1
文件中就保留一种