Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 非阻塞CSV读取_Java - Fatal编程技术网

Java 非阻塞CSV读取

Java 非阻塞CSV读取,java,Java,我们有使用BufferedReader在线程中读取CSV的代码。例如,如果要上载五个CSV,则将打开五个线程,读取不同的CSV文件,并使用其自己的BufferedReader。最近我们注意到,当六个上传同时运行时,CSV读取速度会变慢,进一步调查发现 未同时读取CSV 当一个线程完成一行的读取后,另一个线程开始读取CSV行 CSV读取按顺序进行,而每个CSV 上载在独立线程中运行,未共享BufferedReader或 相同的CSV文件 那么问题应该是什么呢?有什么建议吗。谢谢您正在构造函数中启动

我们有使用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();