我们的代码使用 BufferedReader 在线程中读取CSV。例如,如果要上传五个CSV,则将打开五个线程,读取不同的CSV文件并使用自己的 BufferedReader 。最近我们注意到,当六次上传同时运行时,CSV读数在进一步调查中变得缓慢,我们发现
CSV未同时读取。
当一个线程读完一行后,其他线程开始读取CSV行。
每次CSV时,CSV读数按顺序发生 上传是在独立线程中运行而不是共享BufferedReader或 相同的CSV文件。
class CSVUplod extends Thread{
private String fileName;
private String filePath;
@Override
public void run() {
try{
csvUploadFn();
}catch(Exception e){
e.printStackTrace();
}
}
public CSVUpload(String fileName , String filePath){
this.fileName = fileName;
this.filePath = filePath;
Thread T = new Thread(this);
T.start();
}
private boolean csvUploadFn(){
try {
BufferedReader bf = new BufferedReader(new FileReader(new File(filePath+fileName)));
String csvLine = bf.readLine();
do {
//read line and add into DB
csvLine = bf.readLine();
} while(csvLine!=null);
} catch(Exception ex) {
ex.printStackTrace();
}
return true;
}
}
那么任何建议应该是什么问题。感谢
答案 0 :(得分:0)
你在构造函数中启动你的线程,而它没有完全初始化。这将导致意外行为。
public CSVUpload(String fileName , String filePath){
this.fileName = fileName;
this.filePath = filePath;
Thread T = new Thread(this); // `this` is not fully constructed yet
T.start();
}
在构造函数外部启动线程,看看是否修复了问题。
public CSVUpload(String fileName , String filePath){
this.fileName = fileName;
this.filePath = filePath;
}
在课外:
CsvUpload csvUploader = new CsvUpload("", "");
csvUploader.start();