執行緒池主要用來解決執行緒生命週期開銷問題和資源不足問題。
在實際使用中,伺服器在建立和銷毀執行緒上花費的時間和消耗的系統資源都相當大,甚至可能要比在處理實際的使用者請求的時間和資源要多的多。
伺服器應用程式需要採取一些辦法來限制任何給定時刻處理的請求數目,盡可能減少建立和銷毀執行緒的次數
好處:
頂層介面,execute用來執行已經提交的runnable任務物件
public
inte***ce executor
介面,增加了其他的方法submit、shutdown
void shutdown();
listshutdownnow();
future> submit(runnable task);
futuresubmit(callabletask);
抽象類,實現了executorservice介面
public future> submit(runnable task)
protected
runnablefuturenewtaskfor(callablecallable)
任務為空直接返回空指標異常
新建乙個ftask物件,呼叫了execute方法去執行任務
newtaskfor返回的是乙個futuretask物件,這個類即實現了runnable介面又實現了callable介面,
這樣它既可以當作執行緒的執行物件又可以對任務執行後的結果進行獲取。
工廠類,它所有的方法返回的都是threadpoolexecutor、scheduledthreadpoolexecutor這兩個類的例項
threadpoolexecutor繼承自abstractexecutorservice
四個建構函式:
public
threadpoolexecutor(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueueworkqueue,
threadfactory threadfactory,
rejectedexecutionhandler handler)
引數
執行緒工廠
static
class
defaultthreadfactory
implements
threadfactory
成員物件:
workercountof(c)是計算當前執行緒池中的執行緒數
(1)如果執行緒池中的執行緒數量少於corepoolsize,就建立新的執行緒來執行新新增的任務;
(2)如果執行緒池中的執行緒數量大於等於corepoolsize,但佇列workqueue未滿,則將新新增的任務放到workqueue中,按照fifo的原則依次等待執行(執行緒池中有執行緒空閒出來後依次將佇列中的任務交付給空閒的執行緒執行);
(3)如果執行緒池中的執行緒數量大於等於corepoolsize,且佇列workqueue已滿,但執行緒池中的執行緒數量小於maximumpoolsize,則會建立新的執行緒來處理被新增的任務;
(4)如果執行緒池中的執行緒數量等於了maximumpoolsize,就用rejectedexecutionhandler來做拒絕處理
executorservice的建立
當我們使用完成executorservice之後應該關閉它,否則它裡面的執行緒會一直處於執行狀態
execute(runnable):
submit(runnable):如果任務執行完成,future.get()方法會返回乙個null
submit(callable):如果任務執行完成,future.get()方法會返回callable任務的執行結果
future.get()方法會產生阻塞
我們可以通過呼叫執行緒池的shutdown或shutdownnow方法來關閉執行緒池,但是它們的實現原理不同,
Java執行緒池
executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...
Java執行緒池
一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...
java 執行緒池
1.執行緒池的作用 限制系統中執行執行緒的數量 2.為什麼要用執行緒池 2.1.減少了建立和銷毀執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務.2.2 可以根據系統的承受能力,調整執行緒池中工作線執行緒的數目,防止因為消耗過多的記憶體,而把伺服器累趴下。3.執行緒池介面類 3.1 ex...