Java併發程式設計實踐之Executor框架
阿新 • • 發佈:2019-02-01
java中任務的抽象不是Thread,而是Executor!
public interface Executor {
void execute(Runnable command);
}
怎麼理解這句話呢,可以認為Thread是任務的執行,而無法代表任務的抽象,一個任務的抽象應該包含任務的執行策略來描述“What, Where, When, How”等問題:
在什麼(What)執行緒中執行任務?
任務按照什麼(What)順序執行?
有多少個(How Many)任務能併發執行
在佇列中有多少個(How Many)任務在等待執行
如果系統由於過載而需要拒絕一個任務,那麼應該選擇哪一個(Which)任務?如何(How)通知應用程式有任務被拒絕?
在執行一個任務之前或之後,應該進行哪些(What)動作?
在Executor中提供個幾個執行緒池的實現,來幫助完成上述設計的執行策略,他們可以通過Executors的靜態工廠方法之一來建立,這些方法分別是:newFixedThreadPool, newCachedThreadPool, newSingleThreadExecutor, newScheduledThreadPool.
其中newFixedThreadPool將建立一個固定長度的執行緒池,建立之後規模不在變化
newCachedThreadPool 執行緒池規模不受限制
newSingleThreadExecutor 單個執行緒序列執行任務
newShceduledThreadPool 建立一個固定長度的執行緒池,而且以延遲或定時的方式來執行任務