我希望通過故事的方式嘗試和大家說說執行緒池
老爸就是jvm,店鋪就是乙個執行緒池,員工就是乙個執行緒,顧客就是要執行的方法。
threadpoolexecutor 的引數
【我要開店了,老爸是土豪,老爸給了一些他自己的元老給我用】
int corepoolsize,最少的核心執行緒數,(老爸最開始給的員工,說白了就是元老,用來保命的,打死也不能炒的,除非關店了)
int maximumpoolsize,(公司最多可以去到多少人)
long keepalivetime,(公司裡面除了元老,還可以招聘員工,但是都是合同工,用完要還的,還的時間)
timeunit unit,(公司裡面除了員工,其他都是合同工,用完要還的,還的時間單位)
blockingqueue workqueue,(開店的流量)
blockingqueue一定是先進先出的,先來的客戶我們先服務。
arrayblockingqueue (有界,一時間只能進來多少個客人,超過了就等下)
linkedblockingqueue (預設無界,也可配置,一時間能進來多少個客人,超過了就等下,你店夠大能吃得下也問題不大。)
rejectedexecutionhandler handler(超出流量時,我們怎麼辦?)
jdk內建了四種拒絕策略:
1、abortpolicy策略(有問題就出錯,新來的客戶就不讓進,讓他**)
該策略直接丟擲異常,阻止系統工作
2、callerrunspolicy策略(打死我也不放棄,除非店關了)
只要執行緒池未關閉,該策略直接在呼叫者執行緒中執行當前被丟棄的任務。顯然這樣不會真的丟棄任務,但是,呼叫者執行緒效能可能急劇下降。
3、discardoledestpolicy策略(打跑老客戶,自己進店)
丟棄最老的乙個請求任務,也就是丟棄乙個即將被執行的任務,並嘗試再次提交當前任務。
4、discardpolicy策略(人這麼多,自己不進去了,默默離開)
默默的丟棄無法處理的任務,不予任何處理。
在threadpoolexecutor建立時,盡量使用abortpolicy策略
另外需要根據場景是否使用無界佇列。
說說android非同步載入的三種方式之執行緒的使用
第一種,使用執行緒 實用場景一 比如需要聯網的操作,我們知道網際網路的效率相對來說是不恆定的,有時候快,有時候慢,如果遇上網路不好的時候,程式一直處於聯網等待狀態,一方面給使用者不好的體驗,另一方面很容易出現經典的anr異常。實用場景二 比如帶的listview的顯示,我們知道通常的比文字資訊大很多...
通過程式設計的方式根據一組封閉的線繪製相同形狀的箍筋
很多的時候我們希望給revit的構件配筋,通過程式設計的方式可以將你用手工繪製的模型線轉化成箍筋。非常方便直觀。我們呼叫rebar.createfromcurves 函式來建立箍筋。函式定義如下 public static rebar createfromcurves document doc,re...
和大家分享我的快樂,祝賀自己通過系統分析師考試
昨天有一件很開心的事情,我上網查了一下,我通過了系統分析師的考試。當時有點意外,因為一直以來工作各方面都比較忙,連blog都寫得比較少。這次考試準備的時間比較短,本來抱的希望就不是很大。我很開心可以通過考試,舊的目標達到了,可以考慮新的目標了。有人把軟考比作雞肋,我覺得那是因為可能把參加軟考的定位弄...