環境
java1.8、idea2018、springboot
幫助人群
java軟件工程師、java後端開發、準備面試的java軟件開發、多線程
多線程【歷史文章列表】
大家可以通過點擊文章鏈接進入這些文章,都是我自己通過實戰後總結的
目前我在開發實戰中遇到的就
- springboot上的多線程
- 鎖和線程關係密切
- 鎖和線程關係密切
- 多線程基礎概念和例子
- 多線程Callable和Future
Callable和Future
Callable和Future解決了Runnable不能返回值或拋出異常的問題。
Future:可以用來查看任務的生命週期以及操作任務,如獲取任務結果、取消任務
方法:
- cancel():嘗試取消任務。
- isCancelled():
- isDone():
- get():返回計算結果。
- get(timeout):可以設置超時時間。
總結
- 5篇文章裡面建議大家收藏,面試或開發實戰都可以參考參
- 多線程不要亂用,儘量先串行,當生產環境真的不能應付在考慮並行。
- 面試多線程時,多多結合實戰跟面試官分講講。
![學好了多線程技術,程序員就有底氣拿23K以上的月薪](http://p2.ttnews.xyz/loading.gif)
線程池【概念複習】
作用:
(1)、通過重複利用線程,減少線程的創建銷燬損耗的資源
(2)、提高響應速度,任務到達時,不用重新創建線程,之間可以使用已經創建好的線程執行。
(3)、提高線程的可管理性
ThreadPoolExecutor可配置項:
- 線程池初始大小
- 最大大小
- 存活時間
![學好了多線程技術,程序員就有底氣拿23K以上的月薪](http://p2.ttnews.xyz/loading.gif)
線程的開銷
- 生命週期的開銷:線程的創建、調度和生命週期管理都由操作系統實現,無論在哪款操作系統下,這些操作的開銷都很可觀。
- 內存佔用:一個線程佔用的棧資源大概在1-2M左右,那麼線程數達到千級別時這個開銷就很可觀。
- 穩定性:不同操作系統和JVM配置下,線程數量將受到棧空間或系統的限制,過多的線程並不會再提升性能。
合理配置線程池大小
- 一般需要根據任務的類型來配置線程池大小:
- 如果是CPU密集型任務,就需要儘量壓榨CPU,參考值可以設為 NCPU+1
- 如果是IO密集型任務,參考值可以設置為2*NCPU
當然,這只是一個參考值,具體的設置還需要根據實際情況進行調整,比如可以先將線程池大小設置為參考值,再觀察任務運行情況和系統負載、資源利用率來進行適當調整。
閱讀更多 程序汪汪 的文章