运行多线程程序同步非常慢的Java

时间:2016-11-13 18:09:52

标签: java multithreading csv conceptual

这个问题有点复杂,但我会尽力使其变得简单。

我有一个程序,我想运行多线程。

这就是该计划的作用:

  1. 初始化可执行文件(命令行实用程序)
  2. 将文件加载到可执行文件中(文件由数据提供者方法提供)
  3. 根据加载的文件
  4. 向该可执行文件发送命令
  5. 解析收到的来自可执行文件的回复
  6. 将结果写入csv文件
  7. 所有这一切都在一个方法中进行。

    然而,当在多线程模式下运行时,一切运行正常,除了写入csv文件的所有结果都是错误的并且乱序。

    但是,当我在方法声明中添加关键字sychronized并运行具有多个线程的程序时,程序运行正常。

    public sychronized void run(Dataprovider data) {
        ...
    }
    

    但是程序的运行速度与我在单线程模式下运行的速度相同。我怎样才能解决这个问题?这让我疯了......

    如何正确运行多线程程序?

    我正在寻找想法和/或指导

    修改

      

    然而,当在多线程模式下运行时,一切运行正常   除了写入csv文件的所有结果都是错误的   顺序。

    我在可执行文件中加载了一个文件,我在该文件上运行了一些计算,然后保存它。然后,我获得新生成的文件的文件大小(以字节为单位)(file.length)。我将新文件的结果与旧文件(已加载的文件)进行比较,我发现新文件小于旧文件(完全错误)。新文件的文件大小始终为12263字节,这是不正确的

    修改

    以下是写入CSV文件的部分代码:

    修改 为简单起见删除代码示例

1 个答案:

答案 0 :(得分:1)

  

然而,当在多线程模式下运行时,一切运行正常   除了写入csv文件的所有结果都是错误的   顺序。

我可以对这句话的意思做出痛苦的猜测,但如果它更具体,那将会有所帮助。

是否结果是错误的,因为来自不同线程的输出混杂在同一行甚至是一行中的相同标记?

在csv文件中,记录通常由换行符分隔。您是否可以重构您的解决方案,以便线程在写入输出之前生成完整的行,并将该行一次性写入输出?

您的解决方案是否已经这样做了? (目前尚不清楚......问题中没有代码。)