多線程技術
上集回顧
本程序汪前面寫了4篇關於鎖的實戰應用開發,軟件這東西就是一個系統科學,你知道分佈式高併發情況需要考慮鎖來防止數據的不一致性,那麼多線程知識你更要學習掌握。會不會多線程,是區分高級開發還是一般開發的標準,很多程序汪工作三四年了可能也沒接觸過多線程實戰,如今大點的互聯網公司多線程是必須掌握。像今日頭條這樣擁有龐大用戶量的APP,後端邏輯代碼肯定到處是多線程應用。廢話多了,馬上開始。
背景
串行執行業務早就不能讓用戶滿意了,你打開今日頭條APP如果刷新10秒還沒數據加載完成,用戶早就拋棄他了。所以為了縮短執行時間,多線程誕生了。
經典案例
- 案例一 利用多線程Callable和Future實現併發增加商品
這個案例,可以進一步優化,思路如下
/** 性能優化分析:當itemInfoList大於200條時可以平均拆分多了list然後,批量save
* 一條條save,當1萬時會吃完mysql連接數,那是非常危險啊
這裡batchNum可以根據你自己算法計數 */
- 案例二 利用多線程Callable和Future實現併發查詢門店
案例三 利用多線程Callable和Future實現併發發消息
注意
- get方法是阻塞的,即:線程無返回結果,get方法會一直等待
- 用spring自帶線程池,避免頻繁創建和銷燬線程,達到線程對象的重用,spring線程池還可以根據生產情況靈活地控制併發的數目
- 還有個坑提醒下,多線程操作可能導致吃光你的數據庫連接數,請根據實際情況配置你的線程池參數。
- 異常需要處理下,可以把異常信息封裝到result對象中。
下集預告
多線程非常高效,但出了問題也是非常頭疼。下集繼續分析多線程的那些坑,想駕馭好多線程,還是要多學習才行啊,有空時來刷下我的文章,技術交流下。
如果覺得對你有幫助請關注,有錯誤請指點,下篇繼續分析【實戰多線程開發注意】
閱讀更多 程序汪汪 的文章