弹簧线程池ThreadPoolExecutor配置并且得到任务执行的结果

  

用ThreadPoolExecutor的时候,又想知道被执行的任务的执行情况,这时就可以用FutureTask。

  

<强> ThreadPoolTask

        包com.paul.threadPool;   进口java.io.Serializable;   进口java.util.concurrent.Callable;   公共类ThreadPoolTask实现Callable可序列化的{   私有静态最终长serialVersionUID=0;//保存任务所需要的数据   私有对象threadPoolTaskData;   私有静态int consumeTaskSleepTime=2000;   公共ThreadPoolTask(对象任务){   这一点。threadPoolTaskData=https://www.yisu.com/zixun/tasks;   }   公共同步的字符串调用()抛出异常{//处理一个任务,这里的处理方式太简单了,仅仅是一个打印语句   system . out。println(“开始执行任务:”+ threadPoolTaskData);   字符串的结果=" ";////便于观察,等待一段时间   尝试{//长r=5/0;   for (int i=0;i<100000000;我+ +){   }   结果=癘K”;   }捕捉(异常e) {   e.printStackTrace ();   结果=按砦蟆?   }   threadPoolTaskData=https://www.yisu.com/zixun/null;   返回结果;   }   }      

<强>模拟客户端提交的线程

        包com.paul.threadPool;   进口java.util.concurrent.ExecutionException;   进口java.util.concurrent.FutureTask;   进口org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;   公共类StartTaskThread实现Runnable {   私人ThreadPoolTaskExecutor ThreadPoolTaskExecutor;   私人int我;   公共StartTaskThread (ThreadPoolTaskExecutor ThreadPoolTaskExecutor, int i)   {   这一点。threadPoolTaskExecutor=threadPoolTaskExecutor;   这一点。我=我;   }   @Override   公共同步空白run () {   字符串任务=皌ask@”+我;   system . out。println(“创建任务并提交到线程池中:“+任务);   FutureTaskfutureTask=new FutureTask (   新ThreadPoolTask(任务));   threadPoolTaskExecutor.execute (futureTask);//在这里可以做别的任何事情   字符串的结果=零;   尝试{//取得结果,同时设置超时执行时间为0.1秒。同样可以用future.get(),不设置执行超时时间取得结果   结果=futureTask.get ();   }捕捉(InterruptedException e) {   futureTask.cancel(真正的);   }捕捉(ExecutionException e) {   futureTask.cancel(真正的);   }捕捉(异常e) {   futureTask.cancel(真正的);//超时后,进行相应处理   最后}{   system . out。println (“task@”+我+”:结果=" +结果);   }   }      

<强>春配置文件

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;豆类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.xsd   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”比;   & lt; !——配置数据源——比;   & lt; bean id=笆菰础崩?皁rg.apache.commons.dbcp.BasicDataSource”   销毁方法="关闭" p: driverClassName=" com.mysql.jdbc.Driver”   p: url=" jdbc: mysql://localhost: 3306/mb_main& # 63; useUnicode=true&音箱;characterEncoding=UTF-8&音箱;useServerPrepStmts=true”p:用户名="根" p:密码=" 1234 "/比;   & lt; !——配置Jdbc模板——比;   & lt; bean id=癹dbcTemplate”类=皁rg.springframework.jdbc.core.JdbcTemplate”   p: dataSource-ref=笆菰础?比;   & lt; !——事务管理器——比;   & lt; bean id=" transactionManager "   类=" org.springframework.jdbc.datasource.DataSourceTransactionManager "   p: dataSource-ref=笆菰础?比;   & lt; tx:建议id=癹dbcTxAdvice事务管理器”=皌ransactionManager”比;   & lt; tx: attributes>   & lt; tx:方法名=" * "/比;   & lt;/tx: attributes>   & lt;/tx: advice>   & lt; !——使用aop/tx命名空间配置事务管理,这里对服务包下的服务类方法提供事务——比;   & lt; aop: config>   & lt; aop:切入点id==癹dbcServiceMethod”表达“在(com.baobaotao.service . . *)”/比;   & lt; aop:顾问pointcut-ref=" jdbcServiceMethod " advice-ref=" jdbcTxAdvice "/比;   & lt;/aop: config>   & lt; !——配置刀   & lt; bean id=發oginLogDao”类=癱om.baobaotao.dao.LoginLogDao”   p: jdbcTemplate-ref=" jdbcTemplate "/比;   & lt; bean id=皍serDao”类=癱om.baobaotao.dao.UserDao”   p: jdbcTemplate-ref=" jdbcTemplate "/比;   & lt; bean id=皍serService”类=癱om.baobaotao.service.UserService”   p: userDao-ref=" userDao " p: loginLogDao-ref=" loginLogDao "/比;   ——比;   & lt; bean id=皌hreadPoolTaskExecutor”类=皁rg.springframework.scheduling.concurrent.ThreadPoolTaskExecutor”比;   & lt; !——核心线程数,默认为1——比;   & lt;属性名=" corePoolSize " value=" https://www.yisu.com/zixun/10 "/比;   & lt; !——最大线程数,默认为整数。MAX_VALUE——比;   & lt;属性名=" maxPoolSize " value=" https://www.yisu.com/zixun/50 "/比;   & lt; !队,列最大长度,一般需要设置值祝辞=notifyScheduledMainExecutor.maxNum;默认为Integer.MAX_VALUE   & lt;属性名=" queueCapacity " value=" https://www.yisu.com/zixun/1000 "/比;   ——比;   & lt; !——线程池维护线程所允许的空闲时间,默认为60年代——比;   & lt;属性名=" keepAliveSeconds " value=" https://www.yisu.com/zixun/300 "/比;   & lt; !——线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy, CallerRunsPolicy;默认为后者——比;   & lt;属性名=皉ejectedExecutionHandler”比;   & lt; !——AbortPolicy:直接抛出java . util . concurrent。RejectedExecutionException异常——比;   & lt; !null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

弹簧线程池ThreadPoolExecutor配置并且得到任务执行的结果