Java文件输入输出流竞争条件

时间:2018-03-20 13:55:49

标签: java inputstream race-condition outputstream

我无法获得结果。我应该得到

0 1 2 3 .....3000

运行代码后,我明白了:

65488
65489
65489 
5528
65529
65529
65529
65530
65531
65531
65531
65532
65532
65532
65533
6553......

对于我的作业,我需要使用以下条件构建(总和)代码:

  1. 它读取文件的最后一个数据,并在数据中添加1

  2. 0必须是文件的第一个数据 ex)0 1 2 .....

  3. 它运行程序1000次(0到1000所以总共1001条记录)

  4. 数据文件"打开"并且"关闭"必须在" Load"和" Store"功能分别。

    有人请帮助我:(

    Class Race_Condition

    import java.io.*;
    
    public class Race_Condition {
        static int x=0;
    
        public int Load(int x) throws Exception {
            FileInputStream fis = new FileInputStream("src/out");
            int count;
            byte[] b = new byte[1024]; 
            while ((count = fis.read(b)) != -1) {
                for (int i = 0; i < count; i++) { 
                    x= (char) b[i]; 
                }
            }
            fis.close();
            return x;
        }
    
        public void Store(int data) throws IOException {
    
            FileOutputStream fos = new FileOutputStream("src/out");
            fos.write(x);
            fos.close();
            System.out.println(x);
        }   
    
        public  int Add(int i,int j) {
            return i+j ;
        }
    
        public void sum() throws Exception  {
            for (int i=0 ; i<1000 ; i++) { 
    
                Race_Condition.x=Load(x);
                Race_Condition.x=Add(x,1);
                Store(x);       
            }       
        }
    }
    

    类Race_Condtion2

       import java.io.*;
     public class Race_Condition2 extends Thread{
    
     Race_Condition R= new Race_Condition();
    
      public void run() {
        try {
        R.sum();
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    
     }  
    }
    

    主要课程

    import java.io.*;
    public class Race_ConditonTest 
    {
    
        public static void main(String[] args)throws IOException 
        {
    
            Race_Condition2 R1 = new Race_Condition2();
            Race_Condition2 R2 = new Race_Condition2();
            Race_Condition2 R3 = new Race_Condition2();
    
    
            R1.start();
            R2.start();
            R3.start();
        }
    }
    

0 个答案:

没有答案