executors靜態工廠建立幾種常用執行緒池
1.建立了乙個固定執行緒數量的執行緒池,可以控制線程最大併發數,超出的執行緒會在佇列中等待。
newfixedthreadpool
(int nthreads)
//執行緒池中線程數量是要指定傳入的,注意在固定大小的執行緒池中使用的阻塞佇列是linkedblockingqueue,無界阻塞佇列。
public
static executorservice newfixedthreadpool
(int nthreads)
public
static executorservice newfixedthreadpool
(int nthreads, threadfactory threadfactory)
2.建立了乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有的任務按照指定的順序(fifo, lifo, 優先順序)來執行的。
初始化的執行緒池中只有乙個執行緒,如果該執行緒異常結束,會重新建立乙個新的執行緒繼續執行任務,唯一的執行緒可以保證所提交任務的順序執行,內部使用linkedblockingqueue作為阻塞佇列
newsinglethreadexecutor()
//核心執行緒數和最大執行緒數都為1
public
static executorservice newsinglethreadexecutor()
public
static executorservice newsinglethreadexecutor
(threadfactory threadfactory)
3.建立了乙個可快取的執行緒池,如果執行緒池的長度超過處理需要,它可靈活**空閒執行緒,若無可**,則新建執行緒。
預設存活時間60秒,執行緒池的執行緒數可達到integer.max_value,即2147483647,內部使用synchronousqueue作為阻塞佇列;新增乙個任務即有乙個執行緒處理,或者復用之前空閒的執行緒,或者重親啟動乙個執行緒,但是一旦乙個執行緒在60秒內一直處於等待狀態時(也就是一分鐘無事可做),則會被終止
在沒有任務執行時,當執行緒的空閒時間超過keepalivetime,則工作執行緒將會終止,當提交新任務時,如果沒有空閒執行緒,則建立新執行緒執行任務,會導致一定的系統開銷
newcachedthreadpool()
public
static executorservice newcachedthreadpool()
public
static executorservice newcachedthreadpool
(threadfactory threadfactory)
4.建立了乙個單執行緒的定時任務排程執行緒池
newsinglethreadscheduledexecutor()
public
static scheduledexecutorservice newsinglethreadscheduledexecutor()
public
static scheduledexecutorservice newsinglethreadscheduledexecutor
(threadfactory threadfactory)
5.建立了乙個定長線程池,支援定時及週期性的任務執行。(定時排程執行緒池)
初始化的執行緒池可以在指定的時間內週期性的執行所提交的任務,在實際的業務場景中可以使用該執行緒池定期的同步資料。
newscheduledthreadpool
(int corepoolsize)
public
static scheduledexecutorservice newscheduledthreadpool
(int corepoolsize)
public
static scheduledexecutorservice newscheduledthreadpool
(int corepoolsize, threadfactory threadfactory)
public
static
void
newfixedthreadpooldemo()
});}
//shutdown方法只是發出了停止訊號,
// 等所有執行緒執行完畢會關閉執行緒池;而shutdownnow則是立即停止所有任務。
fixedthreadpool.
shutdown()
;}
fixedthreadpool is starting
1 pool-1-thread-2
5 pool-1-thread-2
6 pool-1-thread-2
7 pool-1-thread-2
8 pool-1-thread-2
9 pool-1-thread-2
10 pool-1-thread-2
0 pool-1-thread-1
11 pool-1-thread-2
13 pool-1-thread-2
14 pool-1-thread-2
12 pool-1-thread-1
3 pool-1-thread-4
2 pool-1-thread-3
4 pool-1-thread-5
這是建立乙個指定數量執行緒的執行緒池,使用newfixedthreadpool方法傳入5個執行緒個數,從結果也可以看出是5個執行緒在併發執行,注意返回型別是executorservice。還使用了execute()方法提交執行緒。
(2)newsinglethreadexecutordemo:
//建立單執行緒的執行緒池,乙個乙個執行緒的執行
單執行緒的執行緒池,只有乙個執行緒在執行。
(3)newcachedthreadpooldemo:
//建立乙個可快取的執行緒池 當執行緒池長度超過所需要的長度,則會收起空閒執行緒
//週期性的
public
static
void
newsecheduledthreadpooldemo()
},3, timeunit.seconds)
;
方法注意:
scheduledexecutorservice#scheduleatfixedrate()指的是「以固定的頻率」執行,period(週期)指的是兩次成功執行之間的時間;
scheduledexecutorservice#schedulewithfixeddelay() 指的是「以固定的延時」執行,delay(延時)指的是一次執行終止和下一次執行開始之間的延遲;
executors建立執行緒池
private static final executor exec executors.newfixedthreadpool 50 runnable runnable new runnable exec.execute runnable callablecallable new callable ...
Executors建立執行緒池
兩個靜態方法 executorservice exec executors.newcachethreadpool 這個方式會為每個任務建立乙個執行緒。executorservice exec executors.newfixedthreadpool 10 建立10個執行緒的執行緒池。執行某個實現ru...
用Executors工具類建立執行緒池
多執行緒技術主要解決處理器單元內多個執行緒執行的問題,它可以顯著減少處理器單元的閒置時間,增加處理器單元的吞吐能力。執行緒池主要用來解決執行緒生命週期開銷問題和資源不足問題。通過對多個任務重用執行緒,執行緒建立的開銷就被分攤到了多個任務上了,而且由於在請求到達時執行緒已經存在,所以消除了執行緒建立所...