1845-2000萬開房數(shù)據(jù)java多線程寫入同一文件源碼 源代碼
這幾天,出現(xiàn)了 2000萬開房數(shù)據(jù)的事情。
好奇心使然,找到種子下載了,發(fā)現(xiàn)格式是 csv的。
一個文件好幾百兆,大概200萬行左右的數(shù)據(jù),現(xiàn)在我要解決的問題是,將 csv的數(shù)據(jù)讀出來,組合數(shù)據(jù),生成sql文件。
一個技術(shù)難點是:多線程寫入同一文件,只能有一個線程寫,其他線程在等待.網(wǎng)上有很多解決方法,但我自己實現(xiàn)了代碼,代碼中有做一個 文件內(nèi)容輸出優(yōu)化,緩存的功能,。
以前單線程跑,跑了一下午才完成,大概跑了幾個小時。多線程跑,大概4-5分鐘左右。
這個場景在平常開發(fā)中也是經(jīng)常要用到的。
先說明,此代碼直接用會報錯,因為要用到我自己的工具類,需要手動將 FileUtils.doWriteFile 這些代碼 換成 System.out 輸出即可

本源碼地址:http://m.bmm520.net/vip/java/2020/0219/20430.html