线程池原理——高频面试题
1.高頻面試題:
1.為什么使用線程池,優勢是什么;
2.線程池如何使用;
3.線程池的幾個重要的參數介紹;
4.線程池底層工作原理;
5.線程池用過嗎?生產上你如何設置合理參數;
2.線程的理解
?3.線程池的意義
線程池稀缺資源,它的創建和銷毀是比較重且好資源的操作。而java線程依賴于內核線程,創建線程需要進行操作系統狀態切換,為避免資源過度消耗需要設法重用線程執行多個任務。線程池就是一個線程緩存,負責對線程進行統一分配、調優與監控。
線程池優勢:
(1)重用存在的線程,減少線程創建,消亡的開銷,提高性能;
(2)提高響應速度。當任務到達時,任務可以不需要等到線程創建就能立即執行
(3)提高線程的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗系統資源,還會降低系統的穩定性,使用線程池可以進行統一的分配,調優和監控
4.線程池是如何實現的-Executor
?創建線程的5種方式
一般不用executor創建,而是通過如下方式創建
拒絕策略:
1.AbortPolicy—拋棄任務并拋出異常(默認的拒絕策略)
2.DiscardPolicy——既不執行任務,也不拋出異常
3.DiscardOldestPolicy——丟掉隊列里面最前面的任務
4.CallerRunsPolicy——調用者回退機制策略
?5.線程池的5種狀態
Running:能接收新任務,以及處理已經添加的任務
Shutdown:不能接收新任務,可以處理已經添加的任務
Stop:不接收新任務,不處理已經添加的任務,并且中斷已經處理中的任務
Tidying:所有的任務已經終止,ctl記錄的任務數量為“0”(ctl負責記錄線程池的運行狀態與活動線程數)
Terminated:線程池徹底終止,則線程池轉化為terminated狀態。
?高三位記錄線程池狀態,低29位記錄活動線程數
?線程池中的線程的復用代碼
6.線程池數量如何設置
1.線程根據執行的任務內容主要分為CPU密集型和IO密集型,很多有經驗的說CPU密集型:線程數量=CPU核數+1,IO密集型線程數量=CPU核數*2;
但是我們知道線程執行有執行時間ST和等待時間WT,應該為(ST+WT)/ST * CPU核數
比如一個線程執行時間ST=0.5s,等待時間WT=1.5s,該機器的核數是8,那么該線程池最大的線程數=(1.5+0.5)/0.5*8=32;
總結
以上是生活随笔為你收集整理的线程池原理——高频面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: DYA9面向对象中--多态
- 下一篇: 王牧羊拜访黄龙观(其一)
