黑马程序员技术交流社区

标题: 多线程写文件的问题 ----没有加同步代码块 [打印本页]

作者: 榨菜    时间: 2014-5-1 13:16
标题: 多线程写文件的问题 ----没有加同步代码块
  1.         public static void main(String[] args) {

  2.                 ThreadFile1 tf1 = new ThreadFile1("1231234342349283498123409182340981234981723098471203984710928340198374091837409182340981230498145234529348509238509283-5982-309485-2039485-209348509458348569845983495839458923592374895");
  3.                 ThreadFile1 tf2 = new ThreadFile1("asdkfakjsdhflkjhsdlfkjhasdlkjfhalsdkjfhalksjdfhlakjsdfhlakjsdflkajsdnflkjahsdflkjahsdkfjhasdk");
  4.                 tf2.start();
  5.                 tf1.start();
  6.         }

  7. }

  8. //线程里面对abc.txt进行写操作
  9. class ThreadFile1 extends Thread {
  10.        
  11.         String str = null;
  12.         public ThreadFile1(String str){
  13.                 this.str = str;
  14.         }
  15.         @Override
  16.         public void run(){
  17.                 File file = new File("abc.txt");
  18.                 FileOutputStream fos = null;
  19.                 try {
  20.                          fos = new FileOutputStream(file);
  21.                        
  22.                         fos.write(new String(str).getBytes());
  23.                         fos.flush();
  24.                         Thread.sleep(3000);
  25.                 } catch (Exception e) {
  26.                         // TODO Auto-generated catch block
  27.                         e.printStackTrace();
  28.                 }finally{
  29.                         try {
  30.                                 fos.close();
  31.                         } catch (IOException e) {
  32.                                 // TODO Auto-generated catch block
  33.                                 e.printStackTrace();
  34.                         }
  35.                 }
  36.                
  37.         }
  38.        
  39. }
复制代码


得到的结果是 在abc.txt里面两个字符串串在一起。  我的问题是为什么abc.txt里面是两个串在一起而不是只有一个str(先有一个线程创建abc.txt,然后被另外一个线程创建abc.txt给覆盖了.


作者: 榨菜    时间: 2014-5-1 13:26
已经解决了,  一个文件只能有一个File,当第一个线程写完成后。才会执行第二个线程中的File。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2