Java 非阻塞CSV读取
我们有使用BufferedReader在线程中读取CSV的代码。例如,如果要上载五个CSV,则将打开五个线程,读取不同的CSV文件,并使用其自己的BufferedReader。最近我们注意到,当六个上传同时运行时,CSV读取速度会变慢,进一步调查发现 未同时读取CSV 当一个线程完成一行的读取后,另一个线程开始读取CSV行 CSV读取按顺序进行,而每个CSV 上载在独立线程中运行,未共享BufferedReader或 相同的CSV文件Java 非阻塞CSV读取,java,Java,我们有使用BufferedReader在线程中读取CSV的代码。例如,如果要上载五个CSV,则将打开五个线程,读取不同的CSV文件,并使用其自己的BufferedReader。最近我们注意到,当六个上传同时运行时,CSV读取速度会变慢,进一步调查发现 未同时读取CSV 当一个线程完成一行的读取后,另一个线程开始读取CSV行 CSV读取按顺序进行,而每个CSV 上载在独立线程中运行,未共享BufferedReader或 相同的CSV文件 那么问题应该是什么呢?有什么建议吗。谢谢您正在构造函数中启动
那么问题应该是什么呢?有什么建议吗。谢谢您正在构造函数中启动线程,而它尚未完全初始化。这将导致意外的行为
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();
如果您正确地生成线程,它们将不会相互干扰。因为他们什么都不分享。一定还有其他原因。你应该在这里发布你的代码好的,给我一分钟。你如何确定它是连续运行还是并发运行?我在while循环中添加了一些日志,同时启动了六个线程,日志输出显示它们是连续运行的。每秒读取12-15行。
CsvUpload csvUploader = new CsvUpload("", "");
csvUploader.start();