第八章 執行緒池的使用

2021-10-02 08:41:19 字數 2563 閱讀 9032

二 設定執行緒池的大小

三 配置threadpoolexecutor

執行緒工廠

在呼叫建構函式後再定製threadpoolexecutor

四 擴充套件threadpoolexecutor

五 遞迴演算法的並行化

沒見原理,講的是用法:對執行緒池進行配置和調優

不同的執行緒池的執行策略肯定不一樣

並非所有的任務都能適用所有的執行策略,有些型別的任務需要明確地指定執行策略:

依賴性任務。可能會有死鎖問題

使用執行緒封閉機制的任務。併發問題

對響應時間敏感的任務。需要快!

使用threadlocal的任務.執行緒可能會被**,會異常會銷毀

現象

執行緒池只有乙個執行緒(或者資源緊張),a任務中又提交了乙個b任務到執行緒池。並且a要等待b完成。而b在等a騰出執行緒資源

解決辦法

加執行緒現象

大量的耗時任務會拖慢一些不耗時任務的執行時間(要等嘛

解決辦法

限定任務等待資源的時間(許多類庫的可阻塞方法都同時定義了限時版本),比如:thread.join\blockingqueue.put等

這是針對任務層面的方法,即需要任務編寫者維護。

理想大小取決於被提交任務的型別以及所部署系統的特性(硬體)

考慮cpu利用率,等待時間、是否依賴其他資源(記憶體、資料庫連線)等等

threadpoolexecutor為一些executor提供了基本的實現,這些executor是由executors中的newcachedthreadpool等工廠方法返回的

如果上面的預設實現不能滿足,可以通過threadpoolexecutor的建構函式來例項化乙個物件

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueue

workqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

corepoolsize、maximumpoolsize、keepalivetime三者共同負責執行緒的建立與銷毀。

有限的執行緒池會限制可併發執行的任務數量,但如果無限制的建立執行緒,會導致不穩定性。

解決辦法

固定大小的執行緒池,並配乙個存放任務的工作佇列

threadpoolexecutor允許提供乙個blockingqueue來儲存等待執行的任務,基本排隊方法有3種

無界佇列(newfixedthreadpool和newsinglethreadpool採用的方式)

有界佇列(更加穩妥),配合飽和策略一起用

同步移交(適用與非常大或者無界的執行緒池),也可能用到飽和策略。參考:synchronousqueue解析

當有界佇列被填滿後,飽和策略開始發揮作用,可以通過setrejectedexecutionhandler修改。jdk提供了幾種不同的策略實現:

預設是中止策略:丟擲不受檢的異常

呼叫者執行,比較有意思:誰提交的,誰自己來執行(這樣呼叫者就去執行任務,還會阻塞。減緩了提交速度)

使用semaphore(書上有例子,但應該很少用到)

每當執行緒池需要建立新的執行緒時,都是通過執行緒工廠方法來完成的。預設建立的執行緒都是新的、非守護的執行緒.我們可以指定乙個執行緒工廠方法,定製執行緒池的配置資訊。

我們可以自定義執行緒工廠,需要注意:如果在應用程式中徐婭利用安全策略來控制對某些特殊**庫的訪問許可權,那麼可以通過privilegedthreadfactory工廠來定製自定義的執行緒工廠(目前沒接觸過這個,不太了解應用場景)

基本屬性仍可以通過set***方法配置。

如果不想建立後被修改,需要用到executors的unconfigurableexecutorservice來處理一下(newsinglethreadexecutor就是這樣做的

知道個概念就好了,沒細看

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...