使用java

时间:2018-05-14 22:11:09

标签: java multithreading file producer-consumer

我正在尝试从文件中读取5000个整数,并使用两个线程将这些整数写入另一个文件。这是我的代码:

 public class data {
 int value;
 }



  import java.util.*;
  import java.io.*;
  public class oku implements Runnable {

data d;
public oku(data d){
    this.d=d;
}


public synchronized void run(){


    File f= new File("/home/ayyuce/Desktop/ali.dat");
    try{
    Scanner sc= new Scanner(f);
    while(sc.hasNextInt()){
      //synchronized(d){
        d.value=sc.nextInt();

        }

    //}
    sc.close();
    }
    catch(Exception ex){}


  }

  }


 import java.util.*;
 import java.io.*;
 public class yaz implements Runnable {
data d;
public yaz(data d){
    this.d=d;
}
public synchronized void run(){

    File f= new File("/home/ayyuce/Desktop/veri.dat");
    try{
        PrintWriter p = new PrintWriter(f);
        for(int i=0; i<5000;i++){
            //synchronized(d){
            p.println(d.value);
            //System.out.println(d.value);
            }
        //}
        p.close();
    }
    catch(Exception ex){}
   }

 }




public class main_class {
public static void main(String[] args){
    data d= new data();
    //d.value=100;
    oku o= new oku(d);
    yaz y= new yaz(d);
    Thread t1= new Thread(o);
    Thread t2= new Thread(y);
    t1.start();
    t2.start();
  }

}

我使用了生产者消费者算法。它从文件读取并将整数写入数据类中的值,并从数据类读取,写入文件。但它无法正常工作。它将零写入文件。我的代码有什么问题?

谢谢

1 个答案:

答案 0 :(得分:1)

如果是我,我会创建一个单独的对象来跟踪读取和写入文件。

public class fileHandler{
    File f;
    printWriter p

    public void fileHandler(String filename){
        f = new File(filename);
        p = new printWriter(f);
    }

    public void write(String str){
        synchronized(p){
            p.println(str);
        }
    }
}

然后单独调用每个线程的写入。这样就不会有多个线程同时写入同一个文件。

相关问题