多執行緒與高併發系列(二)

2021-10-08 03:42:03 字數 2100 閱讀 5275

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 面試時候有時候會...