<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用線程池的好處 線程池做的工作主要是控制運行的線程的數量,處理過程中將任務放 ,然后在線程創建后啟動這些任務,如果線程數量超過了最大數量超出數量的線程排隊等候,等其它線程執行完畢,再從隊列中取出在務來執行。 1. 降低資源的消耗 通過重復利用已經創建好的線程降低線程的創建和銷毀帶來的損耗 2. 提高相應速度 因為線程池中的線程數沒有超過線程池的最大上限時,有的線程處于等待分配任務的狀態, 當任務來時無需創建新的線程就能執行. 3. 提高線程的可管理性 線程池會對線程做優化處理, 減少創建和銷毀線程帶來的系統開銷. # ThreadPoolExecutor ## 線程池 七大參數 ![](https://img.kancloud.cn/4c/fe/4cfeaef9cdf918042238f55b6345f3d9_796x267.png) ### corePoolSize 核心線程數 要比maximumPoolSize 小 線程池中日常用來工作的核心的線程數量 ### maximumPoolSize 最大線程數量 設置上限、控制資源,防止并發太大把資源耗盡 ### keepAliveTime 存活時間, 多久釋放空閑的線程 如果當前的空閑線程數量大于corePoolSize 的數量, 超過這個時間,就會把多余的線程釋放掉。釋放的是大于corePoolSize 的部分,因為corePoolSize 默認是一直存在 ### TimeUnit unit 時間單位 keepAliveTime 的時間單位 ### BlockingQueue workQueue 阻塞隊列 如果任務有很多,超過了核心線程數,就把過多的任務放到隊列中,等線程空閑了就會去隊列中取出任務進行執行。 比如傳 new LinkedBlockingDeque<>(1000000) 做隊列, 數量最大是 Integer 的最大值, 設置的數值太大會導致內存不夠,注意設置的值要根據內存大小來進行設置 ### ThreadFactory threadFactory 線程的創建工廠 RejectedExecutionHandler handler 隊列滿了的處理策略(拒絕策略) 如果隊列滿了,按照我們指定的拒絕策略進行拒絕執行任務 ## 工作順序(工作原理): 1. 線程池創建,來了任務才去創建線程。也可以設置直接好core數量的核心線程, 2. 線程池中有空閑線程,則直接執行該任務 3. 沒有空閑線程,且當前運行的線程數少于核心線程,則創建新的線程執行該任務 4. 核心線程滿了且阻塞隊列未滿,則將任務入隊列等待線程空閑來隊列獲取任務 5. 阻塞隊列滿了,就直接開新線程執行新來的任務,最大不能超過設置的最大線程數 6. 最大線程數也滿了則使用設置的拒絕策略去處理這個任務 7. 當線程空閑下來,在空閑時間超過設置的存活時間后,會釋放掉非核心線程(超過設置核心線程數的線程都釋放) ## 拒絕策略 AbortPolicy默認):**直接拋異常**,直接拋出RejectedExecutionException異常阻止系統正常運行。 CallerRusPlic:**誰提交誰執行**,這種就是把這個任務交于提交任務的線程執行。 "調用者運行"一種調節機制,該策略既不會拋棄任務,也不會拋出異常,而是將某些任務回退到調用者,從而降低新任務的流量。這個方案即使線程池中的資源全部耗盡,也只會降級到串行執行,不會讓系統變的更糟糕。任務不讓丟失推薦這個方案。 DiscardPolicy:**直接丟棄** 直接丟棄任務,不予任何處理也不拋出異常。如果允許任務丟失,這是最好的一種方案。 DiscardoldestPolicy:**直接丟棄任務隊列中的頭結點** 拋棄隊列中等待最久的任務,然后把當前任務加入隊列中嘗試再次提交當前任務。 ## execute()和submit() 區別 都是向線程池提交任務,submit 有返回值,execute 沒有返回值 ## 合理配置線程池 根據電腦核數配置 CPU密集型: 核數 + 1, 8核就是 設置為 9 IO密集型:IO密集型不是一直在執行任務,則應配置可能多的線程, CPU * 2 的數量 ## 死鎖 死鎖是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力干涉那它們都將無法推進下去,如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。 ### 產生死鎖的主要原因 1. 系統資源不足 2. 進程運行推進的順序不合適 3. 資源分配不當 ### 排查 使用jdk自帶命令 jps -l 查詢運行中的java進程 jstack 進程編號 根據上一步的java進程,選擇有問題的進程編號查詢進程異常信息
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看