【筆記】ThreadPoolExecutor原始碼閱讀(三)
執行緒數量的維護
執行緒池的大小有兩個重要的引數,一個是corePoolSize(核心執行緒池大小),另一個是maximumPoolSize(最大執行緒大小)。執行緒池主要根據這兩個引數對執行緒池中執行緒的數量進行維護。
需要注意的是,執行緒池建立之初是沒有任何可用執行緒的。只有在有任務到達後,才開始建立執行緒,並複用執行緒。
注:此圖不是狀態圖,不是說新增一個執行緒就直接到達corePoolSize狀態,而是要表示,一直新增執行緒直到達到corePoolSize。
註釋裡也寫的很清楚了:
(1)如果執行緒數未達核心數,則每接收一個任務就建立一個工作執行緒(這裡把Worker視為工作執行緒)來處理。
(2)如果執行緒數已達到核心數,那就把任務先放入佇列。等到有工作執行緒完成任務了,會自行從佇列中取任務做。
(3)如果任務無法放入佇列,如佇列是有界佇列,且已滿。那麼就會繼續建立工作執行緒來處理這個任務。注意,這裡的新執行緒已經不是核心執行緒了。
(4)如果執行緒數量已經達到maxPoolSize,這時候就是執行緒不能再建立了,任務也放不進隊列了,就得啟動reject策略。預設策略是AbortPolicy,也就是直接報異常。
相關推薦
【筆記】ThreadPoolExecutor原始碼閱讀(三)
執行緒數量的維護 執行緒池的大小有兩個重要的引數,一個是corePoolSize(核心執行緒池大小),另一個是maximumPoolSize(最大執行緒大小)。執行緒池主要根據這兩個引數對執行緒池中執行緒的數量進行維護。 需要注意的是,執行緒池建立之初是沒有任何可用執行緒的。只有在有任務到達後,才開始建立
【筆記】Mybatis高階查詢(三)--使用<association>標籤實現巢狀查詢及延遲載入
<association>標籤實現巢狀查詢,需要用到以下屬性: select:另一個對映查詢的ID,Mybatis會額外執行這個查詢獲取巢狀物件的結果。 column:列名或別名,將主查詢中列的結果作為巢狀查詢的引數,配置方式如column=
【安全牛學習筆記】手動漏洞挖掘(三)
信息安全 security+ 漏洞挖掘 手動漏洞挖掘Directory travarsal / File include(有區別/沒區別) 目錄權限限制不嚴 / 文件包含/etc/php5/cgi/php.ini allow_url_include = on應用程序功能操作文件,限制不
【php】面向對象(三)
lamp1 變量 步驟 efi 第一個 面向對象 我們 ati 單例 知識點關鍵詞:FSCICATS一、 f => final: a) 是一個修飾符,用來修飾類和成員方法 b) 使用final修飾符修飾的類不能被繼承,使用final修飾符修飾的成員方法,不能被重寫
【20171115】BugFree使用手冊(三)Bugfree界面和後臺管理
結果 所有 idt 重新 case 系統 切換 cal define 三、Bugfree界面 1. 登錄界面 如圖所示: 2. 主界面 輸入系統提供的默認管理員用戶名:admin,密碼(原始):123456;語言選擇默認“簡體中文”。點擊“登錄”按鈕,來到
【筆記】Mybatis高階查詢(八)--列舉處理器的使用
在sys_role中有一個欄位enabled,只有2個可選值,0-禁用,1-啟用。在SysRole中使用了Integer enabled來定義,這種情況下必須手動校驗enabled的值是否符合要求,在只有2個值的時候處理比較容易,但當值很多的時候,處理就比較麻煩。這時候就要使用Myb
【筆記】Mybatis高階查詢(七)--儲存過程呼叫
以下例子展示Mybatis儲存過程呼叫,與普通查詢基本一樣,只是在配置對映時要加上statementType=“CALLABLE”,由於儲存過程方式不支援Mybatis的二級快取,所以要加上useCache=“false”。 在儲存過程中使用引數時,除了配置屬性名外,還需要指定
【筆記】Mybatis高階查詢(六)--鑑別器discrimiator的使用
<discrimiator>鑑別器標籤用來處理不同資料型別執行不同操作的。與java的switch語句相似。有以下屬性: column:該屬性用於設定要進行鑑別比較值的列。 javaType:該屬性用於指定列的資料型別,保證使用相同的java
【筆記】Mybatis高階查詢(小結)--巢狀查詢及延遲載入
<association>與<collection>標籤一對一、一對多,多對多查詢時用到的屬性 property:對應實體類中的屬性名,必填項。 javaType:屬性對應的型別。 resultMap:可以直接使用現有
【筆記】Mybatis高階查詢(五)--使用resultMap的<collection>進行巢狀查詢及延遲載入
下面例子通過<collection>實現一個通過使用者編號查詢使用者下面的角色及許可權的需求,支援延遲載入。下面以自下而上的過程來實現這樣的巢狀查詢功能。並且這個自下而上的過程中每一個方法都是獨立可用的方法。上層的結果都以下層方法為基礎。所有物件都設定為延遲載入。
【筆記】Mybatis高階查詢(四)--使用resultMap的<collection>標籤實現一對多和多對多查詢
<collection>集合的巢狀結果對映就是指通過一次SQL查詢將所有的結果查詢出來,然後對映到不同的物件中。在一對多的關係中,主表一條資料會對應關聯表的多條資料。因此一般查詢時會查詢出多條結果,按照一對多的資料對映時,最終的結果數會小於等於查詢的總記錄數。
【Flask】4個session(三)Flask_session擴充套件包
在上一篇文章4個session(二)中的session是Flask內建的,本篇文章要討論的是Flask_session擴充套件包。 安裝命令: pip3 install flask-session 匯入方式: from flask_session import Session
【翻譯】CodeMix使用教程(三):Emmet
CodeMix中的Emmet Emmet是改善開發人員工作流程的好方法。 使用Emmet,可以動態解析類似CSS的表示式,並根據您在縮寫中鍵入的內容生成輸出。 Emmet支援內置於CodeMix中,無需擴充套件。 CodeMix外掛與基於Eclipse的IDE和工具(如MyEclips
【筆記】Mybatis高階查詢(九)--Mybatis程式碼生成器的使用
Mybatis Generator,簡稱MBG,是Mybatis開發團隊提供的一個很強大的程式碼生成器,可以生成資料庫表對應的實體類、Mapper介面類、Mapper XML檔案和Example物件等。這些程式碼檔案幾乎包含了全部的單表操作方法。使用MBG可
【mysql】mysql索引探索(三)-- 高效能使用索引的策略
既然我們已經對索引的本質有所瞭解,那麼我們就應該來討論如何高效能的使用引擎。 1. 列的離散性越高,選擇性越好。 列的離散性是這樣定義的:count(discount col):count(col),也就是不同的列數比列的總數。這個數值越大說明列的離散型就越好。 如果用
【轉】字串匹配演算法(三)位運算的魔法——KR與SO
位運算經常能做出一些不可思議的事情來,例如不用臨時變數要交換兩個數該怎麼做呢?一個沒接觸過這類問題的人打死他也想不出來。如果拿圍棋來做比喻,那麼位運算可以喻為程式設計中的“手筋”。 按位的儲存方式能提供最大的儲存空間利用率,而隨著空間被壓縮的同時,由於CPU硬體的直接支援,速度竟然神奇般
【spring】BeanFactory原始碼+例項(下)FactoryBean+依賴注入
前言: 原始碼+例項:你、值得擁有 3. FactoryBean介面 實現了FactoryBean介面的bean是一類叫做factory的bean。其特點是,spring會在使用getBean()呼叫獲得該bean時,會自動呼叫該bean的g
【POCO】POCO學習總結(三)——交叉編譯
最小功能編譯 編譯選項:–minimal :只構建XML, JSON, 工具 and 網路 1 修改配置檔案 $ vi poco-1.7.8p3-all/build/config/ARM-Linux 13 LINKMODE ?
【原創】docker原始碼分析(2)---docker server
上一節,分析了Engine和job。那這一節就開始講下docker server。 1、docker server 1.1 主體流程 我們從main函式開始,看看docker server
【Junit】Junit使用教程(三)
四、例項總結 1. 引數化測試 有時一個測試方法,不同的引數值會產生不同的結果,那麼我們為了測試全面,會把多個引數值都寫出來並一一斷言測試,這樣有時難免費時費力,這是我們便可以採用引數化測試來解決這個問題。引數化測試就好比把一個“輸入值,期望值”的集合傳入給測試方法,達到