設:我們有一個coreSize=10,maxSize=20,keepAliveTime=60s,queue=40 1、池初始化時裡面沒有任何線程。 2、當有一個任務提交到池就創建第一個線程。 3、若繼續提交任務,有空閑線程就調撥空閑線程來處理任務?若沒有線程空閑則再新建一個線程來處理,如此直到cor ...
設:我們有一個coreSize=10,maxSize=20,keepAliveTime=60s,queue=40
1、池初始化時裡面沒有任何線程。
2、當有一個任務提交到池就創建第一個線程。
3、若繼續提交任務,有空閑線程就調撥空閑線程來處理任務?若沒有線程空閑則再新建一個線程來處理,如此直到coreSize。【預熱階段】
4、若繼續提交任務,有空閑線程就調撥空閑線程來處理任務,如果沒有空閑線程(10個)則將任務緩存到queue中排隊等待。
5、若繼續提交任務,而已有線程不空閑,且queue也滿了,則新建線程,並將最新的任務優先提交給新線程處理。
6、若繼續提交任務,且所有線程(20個)仍不空閑,queue也是滿的,此時就會觸發池的拒絕機制。
8、一旦有任何線程空閑下來就會從queue中消費任務,直到queue中任務被消費完。
9、當總忙碌線程個數不超過coreSize時,閑暇線程休息keepAliveTime過後會被銷毀。
10、而池中一直保留coreSize個線程存活。