三 執行緒池知識點整理筆記

2021-09-24 08:29:51 字數 2005 閱讀 3619

5、執行緒池知識點整理

1)、執行緒池型別:

newcachedthreadpool:建立乙個可快取執行緒池,如果執行緒池長度超過處理需要,

可靈活**空閒執行緒,若無可**,則新建執行緒;

newfixedthreadpool:建立乙個定長線程池,可控制線程最大併發數,

超出的執行緒會在佇列中等待;

newscheduledthreadpool:建立乙個定長線程池,支援定時及週期性任務執行;

newsinglethreadexecutor:建立乙個單執行緒化的執行緒池,它只會用

唯一的工作執行緒來執行任務,保證所有任務按照

指定順序(fifo, lifo, 優先順序)執行。

newsinglethreadscheduledexecutor:只有乙個執行緒,用來排程執行將來的任務。

2)、執行緒池示例引數:

new threadpoolexecutor(corepoolsize, maximumpoolsize,keepalivetime,

timeunit.milliseconds,new linkedblockingqueue());

a)、第乙個引數:corepoolsize,核心執行緒數量,

b)、第二個引數:int maximumpoolsize,執行緒池最大執行緒數

c)、第三個引數:long keepalivetime,表示執行緒沒有任務執行時最多保持多久時間會終止

d)、第四個引數:timeunit unit,引數keepalivetime的時間單位,有7種取值

e)、第五個引數:workqueue,乙個阻塞佇列,通過execute方法提交的runnable物件

會儲存在該佇列中

其中阻塞佇列分為以下幾種:

(1)、arrayblockingqueue:基於陣列結構的有界阻塞佇列,按fifo排序任務

(2)、linkedblockingqueue:基於鍊錶結構的阻塞佇列,按fifo排序任務,吞

吐量通常要高於arrayblockingquene;是無界的,可以不指定佇列的大小,但是

預設是integer.max_valu。

(3)、synchronousqueue:乙個不儲存元素的阻塞佇列,每個插入操作必須等到

另乙個執行緒呼叫移除操作,否則插入操作一直處於阻塞狀態,吞吐量通常要高於(2);

(4)、priorityblockingqueue:具有優先順序的無界阻塞佇列;

3)、執行緒池的飽和策略

當阻塞佇列滿了,且沒有空閒的工作執行緒,如果繼續提交任務,必須採取一種策略處理該任務,

執行緒池提供了4種策略:

a)、threadpoolexcutor.abortpolicy()——直接丟擲異常,預設操作;

c)、threadpoolexcutor.discardolderspolicy()——丟棄佇列裡最近的乙個任務,

並執行當前任務;

d)、threadpoolexcutor.discardpolicy()——不處理,直接丟掉;

也可以根據應用場景實現rejectedexecutionhandler介面,自定義飽和策略。

4)、執行流程:

執行excute()方法之後

a)、判斷執行緒池存在核心執行緒的數量與corepoolsize的大小,

若小於corepoolsize,則呼叫addworker函式建立新執行緒;

否則執行b;

b)、判斷等待佇列是否已滿,若未滿,則加入佇列中;否則執行c;

c)、判斷執行緒池是否已滿,若未滿,則建立執行緒執行任務;否則執行d;

d)、按照飽和策略,處理任務

部分原始碼(核心在addworker):

public void execute(runnable command)

if (isrunning(c) && workqueue.offer(command))

else if (!addworker(command, false))

reject(command);

}複製**

流程圖(網上找的):

多執行緒知識點整理

基本概念 多執行緒程式在較低的層次上擴充套件了多工的概念 乙個程式同時執行多個任務,通常,每乙個任務稱為乙個執行緒,它是執行緒控制的簡稱。可以同時執行乙個以上執行緒的程式稱為多執行緒程式。多程序與多執行緒的區別 每個程序擁有自己的一整套變數,而執行緒則共享資料。相關介面 執行緒的狀態 要獲得乙個執行...

多執行緒知識點整理

多執行緒 多執行緒其實就是指執行緒在同一時間在cpu上同時進行。具體分為兩種模式 一種是指多條執行緒在同乙個cpu上分段時間執行,其實就是並行的意思。一種是多條執行緒在cpu上同時執行的,其實就是併發的意思。多執行緒的問題 多執行緒主要的問是,在多條執行緒運 況下,會出現以下情況 1.多個執行緒同時...

linux c c 知識點整理 三

過載即為函式過載,過載的特徵 1 相同的範圍,也就是在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字無影響 覆蓋是指派生類函式覆蓋基類函式,覆蓋的特徵 1 不同的範圍,即函式分別位於派生類和基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字 隱藏是指派...