2. threadpoolexecutor
3. 執行緒池種類
public
class
mythread
extends
thread
}mythread t1 =
newmythread()
;t1.
start()
;
public
class
mythread
extends
otherclass
implements
runnable()
}//啟動 mythread
mythread t1=
newmythread()
; t1.
run(
);
public
class
mythread_1
catch
(interruptedexception e)}}
);}}
}
public
class
mythread_2
pool.
shutdown()
;for
(future f : list)
}}
threadpoolexecutor 繼承自 executorservice。
public
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory,
rejectedexecutionhandler handler)
每個引數的含義:
執行緒池中線程已經用完,無法繼續為新任務服務,等待佇列也排滿了,不能容納新任務時,需要採用拒絕策略。
jdk提供了一下四種,也可以自定義拒絕策略
拒絕策略
描述abortpolicy
直接丟擲異常,阻止系統正常執行
callerrunspolicy
若執行緒池未關閉,該策略直接在呼叫者執行緒中,執行當前被丟棄的任務,會影響任務的提交效率
discardpolicy
不能執行的任務直接刪除
discardoldpolicy
若執行緒執行尚未關閉,最老的執行緒刪除,即工作佇列頭部的任務刪除
阻塞佇列
描述linkedblockingqueue
無界,直到記憶體滿
arrayblockingqueue
有界,put()阻塞,add()拋異常,offer()不阻塞
delayqueue
支援延時獲取元素的無界阻塞佇列
synchronousquene
不儲存元素的阻塞佇列,只有有take()才put(),類似於傳球手,可用於兩個執行緒交換書
transferqueue
裝完元素等著被消費 ,新增了transfer(),等待消費結果,例如:等著支付結果
priorityqueue
支援優先順序的無界佇列 ,排好順序的樹,內部採用了二叉樹
queue相比較與陣列而言,新增了一些對執行緒友好的api。
執行緒池種類
執行緒數指定方式
使用場景
singlethreadpool
乙個執行緒
任務隊列為linkedblockingqueue ,管理執行緒週期、任務佇列
cachethreadpool
根據需要動態建立新執行緒
執行緒波動不穩定時使用,短期非同步任務, 任務隊列為synchronousqueue
fixthreadpool
可重用的,固定執行緒數
執行緒波動穩定時使用
schdualthreadpool1
定時任務執行緒池
底層是threadpoolexecutor
多執行緒與高併發
blocked 鎖池 timed waiting 定時等待 waiting 等待 terminated 禁止指令重排序 記憶體屏障 在單例雙重檢查中,不加會出現使用半初始化的值,也就是還未附初始值,指令重排導致的 類載入與指令重排的知識 public class spinlock while fla...
多執行緒高併發系列之ReenTrantLock鎖
reentrantlock可以替代synchronized鎖,並且比synchronized鎖更靈活 synchronized鎖是自動上鎖 自動解鎖,而reentrantlock需要手動上鎖 手動解鎖synchronized鎖在程式執行時,如果拋異常,jvm會自動釋放鎖,而reentrantlock...
多執行緒與高併發 一
建立乙個執行緒的兩種方式 繼承threadclass mythread extends thread newmythread start 實現runnable介面class mythread implements runnable newthread new myrun start 面試時候有時候會...