古詩詞大全網 - 古詩大全 - 4. 線程池使用

4. 線程池使用

線程池: 如果線程的數量很多,並且每個線程都是執行壹個時間很短的任務就結束,這樣頻繁創建線程會大大增加系統的開銷,因為創建和消毀線程都需要資源和時間的

簡單實例:

分析:

以上就是直接new壹個線程池出來運行,但是阿裏開發手冊禁止使用該方法來啟動壹個線程池.而推薦使用ThreadPoolExecutor來創建

先看ThreadPoolExecutor源碼

構造器提供了的參數我們來分析壹下

阿裏推薦我們使用ThreadPoolExecutor來創建線程池,原因是這樣創建線程比較靈活,可以根據自己的業務去定制線程池

ThreadPoolExecutor源碼這裏就先不講解放到下篇文章講解,這裏說說ThreadPoolExecutor的執行過程,如何觸發maximumPoolSize的執行線程啟動

上例子:

以上的執行結果我拷貝壹定出來分析:

看到執行結果的朋友們都驚呆了,為什麽這執行順序1,2,3執行的壹下子跳到54個任務,然後處理完62的任務又執行4以下的任務,接下來的順序就正常了

原因: 定義線程池是核心為3個線程,所以執行了1-3任務,沒問題!到後面線程pool-4-thread-(4-12)都是 maximumPoolSize - 核心線程 = 要創建的臨時線程數.這裏是 重點 ,這些臨時線程是當妳工作隊列滿了的情況才創建出來的, 而工作隊列裏面的任務是不先處理,而且讓工作隊列存放不下的任務,直接交給臨時線程處理,所以臨時線程直接執行了54-62任務,然後處理完之後在去隊列裏面從頭獲取任務執行,所以執行完62任務後後面的執行順序就正常了.運行到了下面,直接任務數到了29381082時,這裏我是啟動了任務執行處理不來是或工作隊列滿了時,任務丟棄了,所以存到工作隊列任務的數字就是29381082,然後就通過線程去獲取任務指定任務