我正在尝试从文件中读取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();
}
}
我使用了生产者消费者算法。它从文件读取并将整数写入数据类中的值,并从数据类读取,写入文件。但它无法正常工作。它将零写入文件。我的代码有什么问题?
谢谢
答案 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);
}
}
}
然后单独调用每个线程的写入。这样就不会有多个线程同时写入同一个文件。