在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 同時(shí)開3個線程執(zhí)行持久化操作的問題

同時(shí)開3個線程執(zhí)行持久化操作的問題

大家好,我有一個問題,現(xiàn)在有10000條數(shù)據(jù),我每次取100條數(shù)據(jù) 開3個線程持久化處理,后來發(fā)現(xiàn)每個線程拷貝1份,結(jié)果持久化300條數(shù)據(jù),怎么解決?

回答
編輯回答
朽鹿

兩種解決辦法。

一是“劃下道道”,每個線程處理部分記錄,相互之間不重疊,比如說“你處理單數(shù)我處理雙數(shù),你處理1月份我處理2月份”等等。

二是請個“發(fā)牌手”,每個線程從“發(fā)牌手”那里拿“牌”,也就是要處理的記錄,每個線程每次處理完一條記錄后,都從“發(fā)牌手”那里取下一條,直到所有記錄處理完為止。

兩者各有優(yōu)劣。

第一,前者不需要進(jìn)行同步處理,記錄分配的成本為0,后者需要進(jìn)行同步,任務(wù)分配需要一點(diǎn)時(shí)間,其長短取決于分配方式。

第二,前者的分配是一開始固定的,也就是說如果有個線程處理得慢,或者說個別記錄處理得慢的話,那別的線程處理完自己的部分,就無事可做,只能等它完成,于是整體進(jìn)度被拖慢了。后者是動態(tài)的分配記錄,所以即使個別記錄處理得慢,也能讓線程的使用率最大化,盡可能縮短整體的處理時(shí)間。

2018年8月28日 23:05
編輯回答
負(fù)我心

先對數(shù)據(jù)進(jìn)行分片,例如你期望3個線程來處理的話,將數(shù)據(jù)盡量均衡的分為三分,然后在你的多線程中,讀取各自的分片數(shù)據(jù)。

BTW:這個問題真的很low.我實(shí)在忍不住想吐槽一下。

2017年8月24日 10:52
編輯回答
柒喵

可以提前split好,這樣各自讀各自的 。如果是動態(tài)的話,最好還是放進(jìn)blockqueue中,

2017年1月13日 10:28