提供了乙個執行緒佇列,佇列中儲存著所有等待狀態的執行緒。避免了建立與銷毀額外開銷,提高了響應的速度。
executor : 負責執行緒的使用與排程的根介面 只有乙個execute(runnable)方法
executorservice 子介面:executorservice 繼承 executor,並宣告了一些方法:submit、invokeall、invokeany以及shutdown等
abstractexecutorservice:抽象介面 abstractexecutorservice 實現 executorservice,基本實現了executorservice中宣告的所有方法
threadpoolexecutor:執行緒池的實現類 threadpoolexecutor 繼承 abstractexecutorservice
scheduledexecutorservice 子介面:負責執行緒的排程 scheduledexecutorservice 繼承 executorservice
scheduledthreadpoolexecutor :繼承 threadpoolexecutor, 實現 scheduledexecutorservice
此類是執行緒池中最核心的乙個類 ,在threadpoolexecutor類中提供了四個構造方法:
public class threadpoolexecutor extends abstractexecutorservice
從上面的**可以得知,threadpoolexecutor繼承了abstractexecutorservice類,並提供了四個構造器,事實上,通過觀察每個構造器的原始碼具體實現,發現前面三個構造器都是呼叫的第四個構造器進行的初始化工作。下面解釋下一下構造器中各個引數的含義:
timeunit.days; //天
timeunit.hours; //小時
timeunit.minutes; //分鐘
timeunit.seconds; //秒
timeunit.milliseconds; //毫秒
timeunit.microseconds; //微妙
timeunit.nanoseconds; //納秒
arrayblockingqueue :乙個由陣列結構組成的先進先出有界阻塞佇列,此佇列建立時必須指定大小。
linkedblockingqueue :乙個由鍊錶結構組成的先進先出有界阻塞佇列,如果建立時沒有指定此佇列大小,則預設為integer.max_value。
priorityblockingqueue :乙個支援優先順序排序的無界阻塞佇列。
delayqueue: 乙個使用優先順序佇列實現的無界阻塞佇列。
synchronousqueue: 乙個不儲存元素的阻塞佇列,這個佇列比較特殊,它不會儲存提交的任務,而是將直接新建乙個執行緒來執行新來的任務。
linkedtransferqueue: 乙個由鍊錶結構組成的無界阻塞佇列。
linkedblockingdeque: 乙個由鍊錶結構組成的雙向阻塞佇列。
threadpoolexecutor.abortpolicy:丟棄任務並丟擲rejectedexecutionexception異常(預設)。
threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。
threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)
threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務
可以自定義拒絕策略
public class myrejected implements rejectedexecutionhandler
}
從上面給出的threadpoolexecutor類的**可以知道,threadpoolexecutor繼承了abstractexecutorservice,我們來看一下abstractexecutorservice的實現:
abstractexecutorservice是乙個抽象類,它實現了executorservice介面。我們接著看executorservice介面的實現:
public inte***ce executor
executor是乙個頂層介面,在它裡面只宣告了乙個方法execute(runnable),返回值為void,引數為runnable型別,從字面意思可以理解,就是用來執行傳進去的任務的;executorservice介面繼承了executor介面,並宣告了一些方法:submit、invokeall、invokeany以及shutdown等;abstractexecutorservice實現了executorservice介面,基本實現了executorservice中宣告的所有方法;threadpoolexecutor繼承了類abstractexecutorservice。
在threadpoolexecutor類中有幾個非常重要的方法:
①execute()
execute()方法:實際上是executor中宣告的方法,在threadpoolexecutor進行了具體的實現,這個方法是threadpoolexecutor的核心方法,通過這個方法可以向執行緒池提交乙個任務,交由執行緒池去執行。
②submit()
③shutdown() :
不會立即終止執行緒池,而是要等所有任務快取佇列中的任務都執行完後才終止,但再也不會接受新的任務
④shutdownnow() :
立即終止執行緒池,並嘗試打斷正在執行的任務,並且清空任務快取佇列,返回尚未執行的任務
還有很多其他的方法:
比如:getqueue() 、getpoolsize() 、getactivecount()、getcompletedtaskcount()等獲取與執行緒池相關屬性的方法
執行緒池框架executor
eexecutor作為靈活且強大的非同步執行框架,其支援多種不同型別的任務執行策略,提供了一種標準的方法將任務的提交過程和執行過程解耦開發,基於生產者 消費者模式,其提交任務的執行緒相當於生產者,執行任務的執行緒相當於消費者,並用runnable來表示任務,executor的實現還提供了對生命週期的...
JUC 執行緒池 Executor
建立執行緒池可以分為三種方式 1.通過threadpoolexecutor的構造方法,建立threadpoolexecutor的物件,即乙個執行緒池物件 此構造方法,一共7個引數,5個必須引數,2個帶有預設值的引數 詳細後面說 傳送 2.通過executors返回的執行緒池物件 這種方法建立的常用執...
JDK 執行緒池
在jdk的4種執行緒池之前,先介紹一下執行緒池的幾個引數 固定執行緒池數量,核心執行緒數 最大執行緒數 任務佇列 linkedblockingqueue integer.max value 無界佇列 適用於同時處理固定任務數的場景.public static executorservice newf...