这个问题有点复杂,但我会尽我所能使它简单。运行一个多线程程序同步非常慢Java
我有一个程序,我想运行多线程。
这是该程序的功能:
- 初始化可执行(命令行实用程序)(文件从数据提供方法提供)
- 将命令发送到该
- 载荷文件到可执行在此基础上被加载
- 文件可执行解析从可执行
- 写入结果csv文件所接收的响应
所有这些都以单一方法进行。
但是,在多线程模式下运行时,一切运行正常,除非写入csv文件的所有结果都是错误的并且不按顺序。
但是,当我在方法声明中添加关键字sychronized并使用多个线程运行程序时,程序工作得很好。
public sychronized void run(Dataprovider data) {
...
}
然而该方案以相同的速度运行,就好像我是在单线程模式下运行。我怎样才能解决这个问题?这使我疯狂......
如何正确运行此程序多线程?
我正在寻找的想法和/或指导
编辑:
然而,在多线程模式下运行时,一切都正常运行 除,全部写入到CSV文件中的结果错误并且出于 的顺序。
我在可执行文件中加载一个文件,我对该文件运行一些计算,然后保存它。然后,我得到文件大小以字节(file.length)为新生成的文件。我将新文件的结果与旧文件(加载的文件)进行比较,发现新文件比旧文件小(这是完全错误的)。文件大小为新的文件是一致的12263个字节,这是不正确
编辑:
这里是部分代码确实写入到CSV文件:
编辑: 删除为了简化代码示例
取决于“所有写入csv文件的结果是错误的和乱序”的意思。 –
你怎么在多线程模式下运行这个?我期望在多线程模式下运行时,所有结果都无序 - 一旦多个线程正在运行,它们不会以任何可预测的顺序执行。 –
@JoeC一旦我在可执行文件中加载一个文件,我对该文件运行一些计算,然后保存它。然后,我得到文件大小以字节(file.length)为新生成的文件。我将新文件的结果与旧文件(加载的文件)进行比较,发现新文件比旧文件小(这是完全错误的)。 –