有上圖可以看出來 , 將線程池的數量設置為 1 和 3 , 完成的時間是差不多的 , 這么什么原因呢 ?
2 回答

Helenr
TA貢獻1780條經驗 獲得超4個贊
問題在于你使用的線程暫存隊列SynchronousQueue。SynchronousQueue是一個無空間的隊列。還有你線程池數量的限制。線程池有兩個數量。核心線程量和總線程量。你說的1和3是核心線程量。10是總線程量。線程任務提交給線程池的流程是首先看是否有空閑的核心線程,如果有就交于核心線程處理。如果沒有就到暫存隊列中等待核心線程釋放。如果暫存隊列也被放滿(現在就是這種情況,SynchronousQueue是一個無空間隊列,你可以理解為一直就是滿的),就會創建臨時線程直接處理溢出的任務。如果臨時線程+核心線程達到了總線程量,而且還有任務提交。線程池就會執行拒絕策略(拒絕策略是可設置且可自定義的。默認的策略的AbortPolicy:丟棄要加入線程池的任務并拋出RejectedExecutionException異常。)。到這里你應該可以明白了為什么時間相隔不打。因為你的線程池執行過程不過是1個核心線程9個臨時線程與3個核心線程7個臨時線程的區別而已。實質上都是10個線程在處理。你可以嘗試使用其他隊列作為線程任務暫存隊列來看看結果。
添加回答
舉報
0/150
提交
取消