欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java  ThreadPoolExecutor使用方法簡單介紹

 更新時間:2017年02月17日 15:26:48   投稿:lqh  
這篇文章主要介紹了java ThreadPoolExecutor使用方法簡單介紹的相關(guān)資料,需要的朋友可以參考下

java  ThreadPoolExecutor

前言:

在項目中如果使用發(fā)短信這個功能,一般會把發(fā)短信這個動作變成異步的,因為大部分情況下,短信到底是發(fā)送成功或者失敗,都不能影響主流程。當然像發(fā)送MQ消息等操作也是可以封裝成異步操作的。

使用基本的New Thread

如果想一個操作變成異步的,可以直接new thread,然后在run方法中實現(xiàn)業(yè)務(wù)操作即可。例如:

 new Thread(new Runnable() {
    public void run() {
      //發(fā)短信、發(fā)MQ消息等
    }
 });

但是這種方式有幾個缺點。

1.每次都會new一個線程,執(zhí)行完后銷毀,不能復用;

2.如果系統(tǒng)的并發(fā)量剛好比較大,需要大量線程,那么這種每次new的方式會搶資源的。

ThreadPoolExecutor

我們可以使用jdk1.5中的ThreadPoolExecutor來封裝異步操作。ThreadPoolExecutor的好處是可以做到線程復用,并且使用盡量少的線程去執(zhí)行更多的任務(wù),效率和性能都相當不錯。demo代碼如下:

public class ThreadPool {
  private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(8, 12, 30,
      TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(50000), new ThreadPoolExecutor.AbortPolicy());

  public static ThreadPoolExecutor getThreadPool() {
    return threadPool;
  }
}

參數(shù)介紹

public ThreadPoolExecutor(int corePoolSize,
               int maximumPoolSize,
               long keepAliveTime,
               TimeUnit unit,
               BlockingQueue<Runnable> workQueue,
               RejectedExecutionHandler handler) {

 }

corePoolSize:當workQueue隊列中的元素還未到達最大值時,corePoolSize表示的池中線程數(shù)量的最大值;
maximumPoolSize:線程池中允許的最大線程數(shù);
keepAliveTime:當前池中的線程數(shù)如果超過了corePoolSize,那么超出那些線程如果空閑太久了,應該需要銷毀的。keepAliveTime就是的是這些線程的最大空閑時間;
unit:keepAliveTime的時間單位;
workQueue:當池中線程數(shù)的數(shù)量已經(jīng)達到了corePoolSize,那么如果請求還繼續(xù)過來,會把請求對應的task放入隊列中;
handler:當workQueue滿了,池中的線程數(shù)又達到了maximumPoolSize,這個時候已經(jīng)沒有多余的資源處理請求了,需要RejectedExecutionHandler 來處理。拒絕處理或者丟棄任務(wù)等等。

執(zhí)行過程

當沒有請求時,線程池中沒有任何線程;

當有請求時,創(chuàng)建線程,一直到池中的線程數(shù)等于corePoolSize;

如果請求太多,需要更多的線程來處理的話,ThreadPoolExecutor選擇把請求放入隊列中,暫時不新建線程;

如果workQueue也滿了,ThreadPoolExecutor會繼續(xù)創(chuàng)建線程,直到線程數(shù)量跟maximumPoolSize相等;

線程數(shù)達到maximumPoolSize了,同時workQueue也慢了,就只能把請求丟給RejectedExecutionHandler 來處理。

備注

使用ThreadPoolExecutor時,需要根據(jù)自己的業(yè)務(wù)情況,適當?shù)闹付▍?shù)值的大小。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 關(guān)于Mybatis與JPA的優(yōu)缺點說明

    關(guān)于Mybatis與JPA的優(yōu)缺點說明

    這篇文章主要介紹了關(guān)于Mybatis與JPA的優(yōu)缺點說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring  ApplicationContextAware 接口的作用及使用方式

    Spring  ApplicationContextAware 接口的作用及使用方式

    Spring提供了許多回調(diào)接口,用于Bean生命周期中執(zhí)行特定的操作,通過實現(xiàn)ApplicationContextAware接口,Spring提供了一種便捷的方式讓 Bean獲取對Spring容器的引用,本文介紹ApplicationContextAware接口的作用、使用方式,以及在實際應用中的常見場景,感興趣的朋友一起看看吧
    2024-01-01
  • 實例講解Java處理PDF圖章的方法

    實例講解Java處理PDF圖章的方法

    在本篇文章里小編給大家分享了關(guān)于Java處理PDF圖章的方法,對此有需要的朋友們可以學習下。
    2019-02-02
  • springboot配置多數(shù)據(jù)源(靜態(tài)和動態(tài)數(shù)據(jù)源)

    springboot配置多數(shù)據(jù)源(靜態(tài)和動態(tài)數(shù)據(jù)源)

    在開發(fā)過程中,很多時候都會有垮數(shù)據(jù)庫操作數(shù)據(jù)的情況,需要同時配置多套數(shù)據(jù)源,本文主要介紹了springboot配置多數(shù)據(jù)源(靜態(tài)和動態(tài)數(shù)據(jù)源),感興趣的可以了解一下
    2023-09-09
  • 避免sql注入_動力節(jié)點Java學院整理

    避免sql注入_動力節(jié)點Java學院整理

    這篇文章主要介紹了避免sql注入,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解自動注冊Gateway網(wǎng)關(guān)路由配置

    詳解自動注冊Gateway網(wǎng)關(guān)路由配置

    這篇文章主要為大家介紹了自動注冊Gateway網(wǎng)關(guān)路由配置的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • JSON Web Token(JWT)原理入門教程詳解

    JSON Web Token(JWT)原理入門教程詳解

    這篇文章主要為大家介紹了JSON Web Token(JWT)原理入門教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • java接口Array介紹

    java接口Array介紹

    這篇文章主要介紹了java接口Array的相關(guān)資料,需要的朋友可以參考下
    2014-10-10
  • Spring XML Schema擴展機制的使用示例

    Spring XML Schema擴展機制的使用示例

    所謂整合,即在Spring的框架下進行擴展,讓框架能無縫的與Spring工程配合使用。Spring設(shè)計了良好的擴展的機制,本文將對Spring的擴展方法及原理進行簡單介紹。
    2021-05-05
  • Java 使用Docker時經(jīng)常遇到的五個問題

    Java 使用Docker時經(jīng)常遇到的五個問題

    這篇文章主要介紹了Java 使用Docker時經(jīng)常遇到的五個問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論