執行緒的建立和切換都是代價比較大的。所以,我們需要有乙個好的方案能做到執行緒的復用,這就涉及到乙個概念——執行緒池。合理的使用執行緒池能夠帶來3個很明顯的好處:
降低資源消耗:通過重用已經建立的執行緒來降低執行緒建立和銷毀的消耗
提高響應速度:任務到達時不需要等待執行緒建立就可以立即執行。
提高執行緒的可管理性:執行緒池可以統一管理、分配、調優和監控。
執行緒池同樣有五種狀態:running, shutdown, stop, tidying, terminated。
privatefinal atomicinteger ctl = new atomicinteger(ctlof(running, 0));
private
static
final
int count_bits = integer.size - 3;
private
static
final
int capacity = (1 << count_bits) - 1;
//runstate is stored in the high-order bits
private
static
final
int running = -1 << count_bits;//
對應的高3位值是111
private
static
final
int shutdown = 0 << count_bits;//
對應的高3位值是000
private
static
final
int stop = 1 << count_bits;//
對應的高3位值是001
private
static
final
int tidying = 2 << count_bits;//
對應的高3位值是010
private
static
final
int terminated = 3 << count_bits;//
對應的高3位值是011
//packing and unpacking ctl
private
static
int runstateof(int c)
private
static
int workercountof(int c)
private
static
int ctlof(int rs, int wc)
變數ctl定義為atomicinteger ,記錄了「執行緒池中的任務數量」和「執行緒池的狀態」兩個資訊。共32位,其中高3位表示」執行緒池狀態」,低29位表示」執行緒池中的任務數量」。
執行緒池引數最全的構造方法
public threadpoolexecutor(intcorepoolsize,
intmaximumpoolsize,
long
keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory,
rejectedexecutionhandler handler)
共有七個引數,每個引數含義如下:
j u c執行緒 執行緒池
final void runworker worker w catch runtimeexception x catch error x catch throwable x finally finally completedabruptly false finally private runnabl...
JUC 執行緒池數量
去乙個網頁抓資料儲存到資料庫中,這個過程也就1秒中吧 執行緒池fixedthreadpool配製多少合適?如果是cpu密集型應用,則執行緒池大小設定為n 1 n為cpu的核數 如果是io密集型應用,則執行緒池大小設定為2n 1 這裡去乙個網頁抓資料 需要建立http請求響 io 應後拿到資料,然後再...
執行緒池 juc包下
1.使用執行緒池的優點如下 1.降低資源消耗 通過重複利用已建立的執行緒,降低執行緒建立與銷毀帶來的損耗。2.提高響應速度 當新任務到達時,任務不需要等待執行緒建立就可以立即執行。3.提高執行緒的可管理性 使用執行緒池可以統一進行執行緒分配 排程與監控。當乙個runnable或callable物件到...