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關鍵字 隱藏是指派...