亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring線程池ThreadPoolExecutor配置并且得到任務執行的結果

2024-07-14 08:43:47
字體:
來源:轉載
供稿:網友

用ThreadPoolExecutor的時候,又想知道被執行的任務的執行情況,這時就可以用FutureTask。

ThreadPoolTask

package com.paul.threadPool;import java.io.Serializable;import java.util.concurrent.Callable;public class ThreadPoolTask implements Callable<String>, Serializable {  private static final long serialVersionUID = 0;  // 保存任務所需要的數據  private Object threadPoolTaskData;  private static int consumeTaskSleepTime = 2000;  public ThreadPoolTask(Object tasks) {    this.threadPoolTaskData = tasks;  }  public synchronized String call() throws Exception {    // 處理一個任務,這里的處理方式太簡單了,僅僅是一個打印語句    System.out.println("開始執行任務:" + threadPoolTaskData);    String result = "";    // //便于觀察,等待一段時間    try {//      long r = 5/0;      for ( int i= 0 ; i< 100000000 ; i++){        }       result = "OK";    } catch (Exception e) {      e.printStackTrace();      result = "ERROR";    }    threadPoolTaskData = null;    return result;  }}

模擬客戶端提交的線程

package com.paul.threadPool;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;public class StartTaskThread implements Runnable{ private ThreadPoolTaskExecutor threadPoolTaskExecutor; private int i; public StartTaskThread(ThreadPoolTaskExecutor threadPoolTaskExecutor,int i) { this.threadPoolTaskExecutor = threadPoolTaskExecutor; this.i = i; } @Override public synchronized void run() { String task = "task@ " + i; System.out.println("創建任務并提交到線程池中:" + task); FutureTask<String> futureTask = new FutureTask<String>( new ThreadPoolTask(task)); threadPoolTaskExecutor.execute(futureTask); // 在這里可以做別的任何事情 String result = null; try { // 取得結果,同時設置超時執行時間為0.1秒。同樣可以用future.get(),不設置執行超時時間取得結果 result = futureTask.get(); } catch (InterruptedException e) { futureTask.cancel(true); } catch (ExecutionException e) { futureTask.cancel(true); } catch (Exception e) { futureTask.cancel(true); // 超時后,進行相應處理 } finally { System.out.println("task@" + i + ":result=" + result); }}

SPRING配置文件

<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 配置數據源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/mb_main?useUnicode=true&characterEncoding=UTF-8&useServerPrepStmts=true" p:username="root" p:password="1234" /> <!-- 配置Jdbc模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource" /> <!-- 事務管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> <tx:advice id="jdbcTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> </tx:attributes> </tx:advice> <!-- 使用aop/tx命名空間配置事務管理,這里對service包下的服務類方法提供事務 --> <aop:config> <aop:pointcut id="jdbcServiceMethod" expression="within(com.baobaotao.service..*)" /> <aop:advisor pointcut-ref="jdbcServiceMethod" advice-ref="jdbcTxAdvice" /> </aop:config> <!-- 配置dao  <bean id="loginLogDao" class="com.baobaotao.dao.LoginLogDao" p:jdbcTemplate-ref="jdbcTemplate" /> <bean id="userDao" class="com.baobaotao.dao.UserDao" p:jdbcTemplate-ref="jdbcTemplate" /> <bean id="userService" class="com.baobaotao.service.UserService" p:userDao-ref="userDao" p:loginLogDao-ref="loginLogDao" /> --> <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心線程數,默認為1 --> <property name="corePoolSize" value="10" /> <!-- 最大線程數,默認為Integer.MAX_VALUE --> <property name="maxPoolSize" value="50" /> <!-- 隊列最大長度,一般需要設置值>=notifyScheduledMainExecutor.maxNum;默認為Integer.MAX_VALUE  <property name="queueCapacity" value="1000" /> --> <!-- 線程池維護線程所允許的空閑時間,默認為60s --> <property name="keepAliveSeconds" value="300" /> <!-- 線程池對拒絕任務(無線程可用)的處理策略,目前只支持AbortPolicy、CallerRunsPolicy;默認為后者 --> <property name="rejectedExecutionHandler"> <!-- AbortPolicy:直接拋出java.util.concurrent.RejectedExecutionException異常 --> <!-- CallerRunsPolicy:主線程直接執行該任務,執行完之后嘗試添加下一個任務到線程池中,可以有效降低向線程池內添加任務的速度 --> <!-- DiscardOldestPolicy:拋棄舊的任務、暫不支持;會導致被丟棄的任務無法再次被執行 --> <!-- DiscardPolicy:拋棄當前任務、暫不支持;會導致被丟棄的任務無法再次被執行 --> <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" /> </property> </bean></beans>

測試類

package com.paul.threadPool;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;@ContextConfigurationpublic class TestThreadPool extends AbstractJUnit4SpringContextTests{ private static int produceTaskSleepTime = 10; private static int produceTaskMaxNumber = 1000; @Autowired private ThreadPoolTaskExecutor threadPoolTaskExecutor; public ThreadPoolTaskExecutor getThreadPoolTaskExecutor() { return threadPoolTaskExecutor; } public void setThreadPoolTaskExecutor( ThreadPoolTaskExecutor threadPoolTaskExecutor) { this.threadPoolTaskExecutor = threadPoolTaskExecutor; } @Test public void testThreadPoolExecutor() { // 構造一個線程池 final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 600, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3), new ThreadPoolExecutor.CallerRunsPolicy()); for (int i = 1; i <= produceTaskMaxNumber; i++) { try { Thread.sleep(produceTaskSleepTime); } catch (InterruptedException e1) { e1.printStackTrace(); } new Thread(new StartTaskThread(threadPoolTaskExecutor,i)).start(); } }}

項目截圖(基于maven構建)

Spring,線程池,ThreadPoolExecutor,任務執行

運行截圖:

Spring,線程池,ThreadPoolExecutor,任務執行

如果遇到cpu忙執行超過1秒的會返回null

Spring,線程池,ThreadPoolExecutor,任務執行

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区在线视| 欧美视频国产精品| 国产黑人绿帽在线第一区| 久久久中精品2020中文| 日本精品免费观看| 欧美激情在线观看视频| 欧美又大又硬又粗bbbbb| 久久国产精品网站| 精品国产区一区二区三区在线观看| 久久国产天堂福利天堂| 欧美野外猛男的大粗鳮| 成人妇女免费播放久久久| 日韩视频第一页| 日韩激情在线视频| 欧美日本高清一区| 人人澡人人澡人人看欧美| 欧美日韩视频在线| 国产欧美精品在线播放| 国产精品久久久久久久久借妻| 国产精品毛片a∨一区二区三区|国| 欧美国产欧美亚洲国产日韩mv天天看完整| 国内精品久久久久| 欧美黄色片在线观看| 亚洲第一区第一页| 92看片淫黄大片欧美看国产片| 亚洲电影在线观看| 亚洲成人激情小说| 成人在线小视频| 91精品国产乱码久久久久久久久| 久久亚洲精品网站| 国产精品88a∨| 亚洲四色影视在线观看| 亚洲一区二区中文| 精品国产欧美一区二区五十路| 国产午夜一区二区| 欧美日韩亚洲成人| 国产精品亚洲自拍| 国产一区二中文字幕在线看| 色综合91久久精品中文字幕| 欧美极品美女视频网站在线观看免费| 亚洲最大成人在线| 亚洲一区二区中文字幕| 欧美日本中文字幕| 国产精品一香蕉国产线看观看| 欧美制服第一页| 欧美日韩亚洲视频一区| 岛国av在线不卡| 欧美巨猛xxxx猛交黑人97人| 欧美高清videos高潮hd| 亚洲国产精品人人爽夜夜爽| 欧美激情一二三| 国产精品免费久久久久影院| 精品国产一区二区在线| 成人高h视频在线| 亚洲美女在线看| 亚洲一区二区福利| 欧美电影免费观看| 日韩亚洲精品电影| 亚洲精品成a人在线观看| 亚洲毛茸茸少妇高潮呻吟| 91精品中文在线| 欧美日韩国产综合新一区| 69影院欧美专区视频| 在线观看日韩专区| 精品久久久999| 中日韩美女免费视频网址在线观看| 久久久久久久久爱| 精品久久久av| 91免费看国产| 亚洲影院污污.| 欧美黄色性视频| 69视频在线免费观看| 在线丨暗呦小u女国产精品| 欧美精品情趣视频| 欧美在线视频免费| 国外视频精品毛片| 亚洲综合中文字幕在线| 精品国产一区二区三区久久久| 国产情人节一区| 亚洲精品久久视频| 亚洲最大激情中文字幕| 国产亚洲一级高清| 国产精品美女免费看| 欧美性生活大片免费观看网址| 亚洲综合成人婷婷小说| 91在线免费看网站| 国产在线视频2019最新视频| 欧美日韩亚洲天堂| 日韩黄在线观看| 久久久999精品视频| 亚洲乱亚洲乱妇无码| 亚洲精品丝袜日韩| 欧美日韩中国免费专区在线看| 国产成人一区二区在线| 国内外成人免费激情在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美怡红院视频一区二区三区| 欧美极品少妇xxxxⅹ裸体艺术| 69av成年福利视频| 日韩一区二区三区xxxx| 亚洲男人第一网站| 国产精品极品美女在线观看免费| 97香蕉超级碰碰久久免费的优势| 中文字幕自拍vr一区二区三区| 91系列在线播放| 18久久久久久| 国产视频久久网| 日韩二区三区在线| 欧美日韩中文在线观看| 成人有码在线视频| 91国偷自产一区二区三区的观看方式| 亚洲成人黄色网| 久久精品国产清自在天天线| 在线国产精品视频| 亚洲天堂精品在线| 欧美国产欧美亚洲国产日韩mv天天看完整| …久久精品99久久香蕉国产| 久久久久久久久91| 国产69精品久久久久9| 日本一区二区不卡| 精品成人69xx.xyz| 欧美日韩爱爱视频| 国产精品国产三级国产aⅴ9色| 日韩av免费在线播放| 亚洲精品中文字幕女同| 色妞久久福利网| 日韩av在线导航| 岛国av一区二区| 2019亚洲男人天堂| 精品成人久久av| 欧美日韩国产在线| 尤物tv国产一区| 国产精品第1页| 91成人性视频| 久久精品亚洲一区| 性金发美女69hd大尺寸| 国产精品视频男人的天堂| 成人精品视频99在线观看免费| 亚洲影院在线看| 97福利一区二区| 国产一区二区三区毛片| 欧美在线性视频| 久精品免费视频| 欧美一区三区三区高中清蜜桃| 亚洲自拍偷拍色图| 久久精品视频在线观看| 97国产真实伦对白精彩视频8| 精品调教chinesegay| 亚洲视频在线免费看| 91成品人片a无限观看| 欧美在线视频网站| 国产一区二区三区直播精品电影| 91av在线视频观看| 青青精品视频播放| 最近2019中文字幕第三页视频| 91久久综合亚洲鲁鲁五月天| 美女精品久久久| 日韩电影中文字幕在线观看| 日韩在线视频中文字幕| 欧美亚洲国产视频小说| 日韩中文第一页| 91久久在线观看| 欧美一区二区视频97| 亚洲全黄一级网站|