1. 程式人生 > >Java併發程式設計實踐之Executor框架

Java併發程式設計實踐之Executor框架

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 建立一個固定長度的執行緒池,而且以延遲或定時的方式來執行任務