執行緒池原理

2021-07-16 14:58:46 字數 1477 閱讀 4984

一、執行緒池優勢:

1.降低資源消耗,通過反覆利用已建立執行緒降低執行緒建立和銷毀造成的消耗;

2.提高響應速度,當任務到達時,任務可以不需要等到執行緒的建立就能立即執行;

3.提高執行緒的可管理性;

二、執行緒池原理:

當提交乙個任務時候,執行緒池處理的這麼乙個流程:

文字描述: 

1.執行緒池判斷核心執行緒池是否都在執行任務,如果都在執行任務的時候則進行下一環節,如果沒有的話,則建立新的工作執行緒來執行任務;

2.執行緒池在檢測任務佇列是否已滿,如果沒滿,則將新提交的任務,放在佇列裡面,否則進行下一環節;

3.執行緒池檢測線程池,是否都在執行任務中,如果沒有則建立新的工作執行緒來執行任務,否則就會把當前提交的任務利用「飽和機制"進行處理操作;

當treadpoolexecutor  execute 分為下面4種情況

1.如果當前的執行的執行緒數小於corepoolsize,則建立新的執行緒來執行任務(注意,建立新的執行緒要獲取全域性鎖);

2.如果當前的執行的執行緒數等於或大於corepoolsize,則把任務放到佇列中blockingqueue;(這個不需要獲取全域性鎖)

3.如果blockingqueue佇列已經滿了,則就會在maximumpoolsize中建立新的執行緒;

4.如果當前的執行緒數等於或者大於maximumpoolsize,任務將被拒絕,然後呼叫「飽和策略機制」,rejectedexecutionhandler.rejectedexecution;

三、執行緒池的使用:

我們通過threadpoolexecutor 來建立執行緒池:

new threadpoolexecutor(corepoolsize,maximumpoolsize,keepalivetime,milliseconds,runnabletaskqueue,handler);

corepoolsize:基本大小的執行緒池,如果當前執行緒數量大於核心執行緒池則不會建立執行緒;

maximumpoolsize:執行緒池最大數量,如果佇列滿了,並且當前執行緒數量小於最大執行緒池的數量,則建立新的執行緒;

keepalivetime:執行緒的活動保持時間,如果任務很多並且每個任務保持的時間很短,所以盡可能增大執行緒活動保持時間,提高效能;

timeunit:執行緒活動保持時間的單位

runnabletaskqueue:任務佇列用於儲存等待執行的任務佇列的阻塞佇列:

arrayblockingqueue:基於陣列阻塞佇列;

linkedbloackingqueue:基於鍊錶結構的阻塞佇列 吞吐量要比陣列的要高;

rejctedexceptionhandler(飽和策略):當佇列和執行緒池都滿了之後,則必須採用一種策略處理提交新任務;

有四種策略:

1.直接拋異常

2.只有呼叫者所在的執行緒來呼叫任務

3.丟棄佇列裡面最近的乙個任務,並執行當前任務;

4.不處理,不丟棄

四、向執行緒池提交任務:

execute()和submit來進行提交任務

執行緒池1 執行緒池原理

執行緒池可以看做容納執行緒的容器 乙個應用程式最多只能有乙個執行緒池 threadpool靜態類通過queueuserworkitem 方法將工作函式排入執行緒池 每排入乙個工作函式,就相當於請求建立乙個執行緒 執行緒池的作用 執行緒池是為突然大量爆發的執行緒設計的,通過有限的幾個固定執行緒為大量的...

執行緒池原理

private static final threadpoolexecutor executor service new threadpoolexecutor 100,120,60,timeunit.seconds,new arrayblockingqueue 1000 new threadfact...

執行緒池原理

有少量請求 建立執行緒 處理 執行緒 交給乙個執行緒處理,處理完畢後,得到乙個結果,傳送給客戶端 有大量請求 例如一秒中發來3000個請求 假設有8個執行緒 生產者消費者模型 將3000個請求放到乙個佇列中,8個執行緒從佇列中取任務並完成它 對於32為系統,1個程序最多能建立多少個執行緒?32位的作...