這個問題有點複雜,但我會盡我所能使它簡單。運行一個多線程程序同步非常慢Java
我有一個程序,我想運行多線程。
這是該程序的功能:
- 初始化可執行(命令行實用程序)(文件從數據提供方法提供)
- 將命令發送到該
- 載荷文件到可執行在此基礎上被加載
- 文件可執行解析從可執行
- 寫入結果csv文件所接收的響應
所有這些都以單一方法進行。
但是,在多線程模式下運行時,一切運行正常,除非寫入csv文件的所有結果都是錯誤的並且不按順序。
但是,當我在方法聲明中添加關鍵字sychronized並使用多個線程運行程序時,程序工作得很好。
public sychronized void run(Dataprovider data) {
...
}
然而該方案以相同的速度運行,就好像我是在單線程模式下運行。我怎樣才能解決這個問題?這使我瘋狂......
如何正確運行此程序多線程?
我正在尋找的想法和/或指導
編輯:
然而,在多線程模式下運行時,一切都正常運行 除,全部寫入到CSV文件中的結果錯誤並且出於 的順序。
我在可執行文件中加載一個文件,我對該文件運行一些計算,然後保存它。然後,我得到文件大小以字節(file.length)爲新生成的文件。我將新文件的結果與舊文件(加載的文件)進行比較,發現新文件比舊文件小(這是完全錯誤的)。文件大小爲新的文件是一致的12263個字節,這是不正確
編輯:
這裏是部分代碼確實寫入到CSV文件:
編輯: 刪除爲了簡化代碼示例
取決於「所有寫入csv文件的結果是錯誤的和亂序」的意思。 –
你怎麼在多線程模式下運行這個?我期望在多線程模式下運行時,所有結果都無序 - 一旦多個線程正在運行,它們不會以任何可預測的順序執行。 –
@JoeC一旦我在可執行文件中加載一個文件,我對該文件運行一些計算,然後保存它。然後,我得到文件大小以字節(file.length)爲新生成的文件。我將新文件的結果與舊文件(加載的文件)進行比較,發現新文件比舊文件小(這是完全錯誤的)。 –