<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 任務阻塞隊列 ![](https://img.kancloud.cn/13/d6/13d64359f30173ea25b4911ee63b5165_1530x546.png) **它一般分為直接提交隊列、有界任務隊列、無界任務隊列、優先任務隊列;** ### SynchronousQueue 1、**直接提交隊列**:設置為`SynchronousQueue`隊列,`SynchronousQueue`是一個特殊的`BlockingQueue`,它沒有容量,每執行一個插入操作就會阻塞,需要再執行一個刪除操作才會被喚醒,反之每一個刪除操作也都要等待對應的插入操作。 使用`SynchronousQueue`隊列,提交的任務不會被保存,總是會馬上提交執行。如果用于執行任務的線程數量小于`maximumPoolSize`,則嘗試創建新的進程,如果達到`maximumPoolSize`設置的最大值,則根據你設置的`handler`執行拒絕策略。因此這種方式你提交的任務不會被緩存起來,而是會被馬上執行,在這種情況下,你需要對你程序的并發量有個準確的評估,才能設置合適的`maximumPoolSize`數量,否則很容易就會執行拒絕策略; ### ArrayBlockingQueue 2、**有界的任務隊列**:有界的任務隊列可以使用`ArrayBlockingQueue`實現,如下所示: ``` pool = new ThreadPoolExecutor(1, 2, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy()); ``` 使用`ArrayBlockingQueue`有界任務隊列,若有新的任務需要執行時,線程池會創建新的線程,直到創建的線程數量達到`corePoolSize`時,則會將新的任務加入到等待隊列中。若等待隊列已滿,即超過`ArrayBlockingQueue`初始化的容量,則繼續創建線程,直到線程數量達到`maximumPoolSize`設置的最大線程數量,若大于`maximumPoolSize`,則執行拒絕策略。在這種情況下,線程數量的上限與有界任務隊列的狀態有直接關系,如果有界隊列初始容量較大或者沒有達到超負荷的狀態,線程數將一直維持在`corePoolSiz`e以下,反之當任務隊列已滿時,則會以`maximumPoolSize`為最大線程數上限。 ### LinkedBlockingQueue 3、**無界的任務隊列**:無界任務隊列可以使用`LinkedBlockingQueue`實現,如下所示: ``` pool = new ThreadPoolExecutor(1, 2, 1000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy()); ``` 使用無界任務隊列,線程池的任務隊列可以無限制的添加新的任務,而線程池創建的最大線程數量就是你`corePoolSize`設置的數量,也就是說在這種情況下`maximumPoolSize`這個參數是無效的,哪怕你的任務隊列中緩存了很多未執行的任務,當線程池的線程數達到`corePoolSize`后,就不會再增加了;若后續有新的任務加入,則直接進入隊列等待,當使用這種任務隊列模式時,一定要注意你任務提交與處理之間的協調與控制,不然會出現隊列中的任務由于無法及時處理導致一直增長,直到最后資源耗盡的問題。 ### PriorityBlockingQueue 4、**優先任務隊列**:優先任務隊列通過`PriorityBlockingQueue`實現: 任務會按優先級重新排列執行,且線程池的線程數一直為`corePoolSize`,也就是只有一個。 `PriorityBlockingQueue`其實是一個特殊的無界隊列,它其中無論添加了多少個任務,線程池創建的線程數也不會超過`corePoolSize`的數量,只不過其他隊列一般是按照先進先出的規則處理任務,而`PriorityBlockingQueue`隊列可以自定義規則根據任務的優先級順序先后執行。 其實`LinkedBlockingQueue`也是可以設置界限的,它默認的界限是`Integer.MAX_VALUE`。同時也支持也支持構造的時候設置隊列大小。
                  <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>

                              哎呀哎呀视频在线观看