執行緒池頂級介面,只定義了乙個執行無返回值任務的方法。
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種設計模式總體來說分為三大類 建立型模式 結構型模式和行為型模式。建立型模式 共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式 共七種 介面卡模...