这个问题有点复杂,但我会尽力使其变得简单。
我有一个程序,我想运行多线程。
这就是该计划的作用:
所有这一切都在一个方法中进行。
然而,当在多线程模式下运行时,一切运行正常,除了写入csv文件的所有结果都是错误的并且乱序。
但是,当我在方法声明中添加关键字sychronized并运行具有多个线程的程序时,程序运行正常。
public sychronized void run(Dataprovider data) {
...
}
但是程序的运行速度与我在单线程模式下运行的速度相同。我怎样才能解决这个问题?这让我疯了......
如何正确运行多线程程序?
我正在寻找想法和/或指导
修改
然而,当在多线程模式下运行时,一切运行正常 除了写入csv文件的所有结果都是错误的 顺序。
我在可执行文件中加载了一个文件,我在该文件上运行了一些计算,然后保存它。然后,我获得新生成的文件的文件大小(以字节为单位)(file.length)。我将新文件的结果与旧文件(已加载的文件)进行比较,我发现新文件小于旧文件(完全错误)。新文件的文件大小始终为12263字节,这是不正确的
修改
以下是写入CSV文件的部分代码:
修改 为简单起见删除代码示例
答案 0 :(得分:1)
然而,当在多线程模式下运行时,一切运行正常 除了写入csv文件的所有结果都是错误的 顺序。
我可以对这句话的意思做出痛苦的猜测,但如果它更具体,那将会有所帮助。
是否结果是错误的,因为来自不同线程的输出混杂在同一行甚至是一行中的相同标记?
在csv文件中,记录通常由换行符分隔。您是否可以重构您的解决方案,以便线程在写入输出之前生成完整的行,并将该行一次性写入输出?
您的解决方案是否已经这样做了? (目前尚不清楚......问题中没有代码。)