線程池總結

一、主要參數說明緩存

    corepoolsize核心線程數、maxpoolsize最大線程數、keepalivetime閒置線程收回時間設置、workQueue工做隊列(SynchronousQueue、LinkedBlockingQueue、ArrayListBlockingQueue)、unit設置keepalivetime是以秒、分鐘爲單位、threadFactory建立線程工廠、allowcore。函數

二、執行順序線程

    若是工做隊列選擇的是LinkedBlockingQueue,線程池中的線程數達到corepoolsize核心線程數後,會將任務放入到隊列中,若是隊列滿了,會繼續建立線程,達到maxpoolsize最大線程數後,能夠選擇幾種策略處理,拋異常拒絕新任務、丟棄新任務或者擠佔已有任務。對象

    若是LinkedBlockingQueue設置是無邊界,則maxpoolsize設置無效。隊列

    若是工做 隊列是SynchronousQueue,線程池中的線程數達到corepoolsize核心線程數後會繼續建立線程,超過設置的最大線程數後報錯。it

三、newFixedThreadPoolnewSingleThreadExector使用的是LinkedBlockingQueue的無界模式,newCachedThreadPool使用的是SynchronousQueuethread

四、線程池建立List

Exectors.newFixedThreadPool(int size):建立一個固定大小的線程池。 每來一個任務建立一個線程,當線程數量爲size將會中止建立。當線程池中的線程已滿,繼續提交任務,若是有空閒線程那麼空閒線程去執行任務,不然將任務添加到一個無界的等待隊列中。
Exectors.newCachedThreadPool():建立一個可緩存的線程池。對線程池的規模沒有限制,當線程池的當前規模超過處理需求時(好比線程池中有10個線程,而須要處理的任務只有5個),那麼將回收空閒線程。當需求增長時則會添加新的線程。
Exectors.newSingleThreadExcutor():建立一個單線程的Executor,它建立單個工做者線程來執行任務,保證任務先進先出,若是這個線程異常結束,它會建立另外一個線程來代替。
Exectors.newScheduledThreadPool():建立一個固定長度的線程池,並且以延遲或定時的方式來執行任務。
上面都是經過工廠方法來建立線程池,其實它們內部都是經過建立ThreadPoolExector對象來建立線程池的。下面是ThreadPoolExctor的構造函數。線程池

相關文章
相關標籤/搜索