執行緒池體系(一) 總體概述

2021-10-10 16:12:53 字數 3033 閱讀 4057

執行緒池頂級介面,只定義了乙個執行無返回值任務的方法。

public

inte***ce

executor

執行緒池次級介面,對executor做了一些擴充套件,主要增加了關閉執行緒池、執行有返回值任務、批量執行任務的方法。

public

inte***ce

executorservice

extends

executor

public

inte***ce

scheduledexecutorservice

extends

executorservice

抽象類,運用模板方法設計模式實現了一部分方法,主要為執行有返回值任務、批量執行任務的方法。

public

abstract

class

abstractexecutorservice

implements

executorservice

protected

runnablefuture

newtaskfor

(callable

callable)

public future<

?>

submit

(runnable task)

public

future

submit

(runnable task, t result)

public

future

submit

(callable

task)

public

t invokeany

(collection<

?extends

callable

> tasks)

throws interruptedexception, executionexception

public

t invokeany

(collection<

?extends

callable

> tasks,

long timeout, timeunit unit)

throws interruptedexception, executionexception, timeoutexception

public

list

>

invokeall

(collection<

?extends

callable

> tasks)

throws interruptedexception

public

list

>

invokeall

(collection<

?extends

callable

> tasks,

long timeout, timeunit unit)

throws interruptedexception

}

可以看到,這裡的submit()方法對傳入的任務都包裝成了futuretask來進行處理,這是什麼東西呢?歡迎關注後面的章節。

普通執行緒池類,這也是我們通常所說的執行緒池,包含最基本的一些執行緒池操作相關的方法實現。

執行緒池的主要實現邏輯都在這裡面,比如執行緒的建立、任務的處理、拒絕策略等,我們後面單獨分析這個類。

定時任務執行緒池類,用於實現定時任務相關功能,將任務包裝成定時任務,並按照定時策略來執行,我們後面單獨分析這個類。

問題:你知道定時任務執行緒池類使用的是什麼佇列嗎?

答:延時佇列。定時任務執行緒池中並沒有直接使用併發集合中的delayqueue,而是自己又實現了乙個delayedworkqueue,不過跟delayqueue的實現原理是一樣的。

執行緒池工具類,定義了一系列快速實現執行緒池的方法——new***(),不過阿里手冊是不建議使用這個類來新建執行緒池的。

executors返回的執行緒池物件的弊端如下:

​ 1)fixedthreadpool 和 singlethreadpool:

​ 允許的請求佇列長度為integer.max_value,可能會堆積大量的請求,從而導致oom。

​ 2)cachedthreadpool 和 scheduledthreadpool :

​ 允許建立的執行緒數量為integer.max_value,可能會建立大量的執行緒,從而導致oom。

executorcompletionservice用於有返回值,必須take,不然將造成記憶體洩漏

completionservice

exec =

newexecutorcompletionservice

<

>

( executorutils.

getmultilivecachethreadpool()

);list

> results = lists.

newarraylist()

;for

(map.entry

entry : queues.

entryset()

)catch

(exception e)

}int sendsuccesscount =0;

//bug

for(future

fs : results)

catch

(exception e)

}//前面保持一致

for(future

fs : results)

catch

(exception e)

}

工作竊取,高效的cpu密集型執行緒池,也是lambda表示式,並行流的底層原理。

專案進度(一) 總體架構

我們製作的專案是果蔬自動識別計價秤,用來自動識別並計價,節省超市的人力成本。專案的總體架構為 採用arduino是因為 簡單清晰的開發 arduino ide基於processing ide開發,有著足夠的靈活性。arduino語言基於wiring語言開發,不需要太多的微控制器基礎 程式設計基礎,簡...

一天乙個設計模式 一 總體概述

設計模式是某類特定問題的 設計解決方案,是一套 設計的經驗總結。在設計模式進行設計時需要遵循以下的物件導向設計原則 常用的23種設計模式總體來說分為三大類 建立型模式 結構型模式和行為型模式。建立型模式 共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式 共七種 介面卡模...

一天乙個設計模式 一 總體概述

設計模式是某類特定問題的 設計解決方案,是一套 設計的經驗總結。在設計模式進行設計時需要遵循以下的物件導向設計原則 常用的23種設計模式總體來說分為三大類 建立型模式 結構型模式和行為型模式。建立型模式 共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式 共七種 介面卡模...