(辦公)訪問其餘系統接口httpClient,異步訪問

  訪問其餘系統接口httpClient,可是都是同步的,同步意味當前線程是阻塞的,只有本次請求完成後才能進行下一次請求;異步意味着全部的請求能夠同時塞入緩衝區,不阻塞當前的線程;spring

     httpClient請求,訪問其餘系統可能無響應,鎖死,訪問請求上線種種問題,這些問題就像蒼蠅嗡嗡嗡的在你耳邊,那麼解決他能夠設置超時時間,可是訪問一個接口將近1分鐘,這個是不該該的,因此仍是要異步請求其餘系統的接口,咱們能夠使用多線程來作,創建一個線程池,只指定10個線程,而後調用方法。(好主意)多線程

   下面是舉個springmvc的例子:mvc

    1.往springmvc裏添加線程池app

application.xml裏添加
 xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <!-- 核心線程數 -->
        <property name="corePoolSize" value="10" />
        <!-- 最大線程數 -->
        <property name="maxPoolSize" value="10" />
        <!-- 隊列最大長度 -->
        <property name="queueCapacity" value="500" />
        <!-- 線程池維護線程所容許的空閒時間,默認爲60s -->
        <property name="keepAliveSeconds" value="200" />
    </bean>

     2.操做:異步

//自定義線程池:
 @Resource
private TaskExecutor taskExecutor;
try {
      taskExecutor.execute(new Runnable() {
        public void run() {
          //這裏編寫處理業務代碼
//注意方法傳遞參數的時候,儘可能使用基本類型的值。
} }); } catch (Exception e) { e.printStackTrace(); }
相關文章
相關標籤/搜索