加载xml文件

在ApplicationContext.xml文件里面添加
  1. xmlns:task="http://www.springframework.org/schema/task"
xmlns:task="http://www.springframework.org/schema/task"

xmlns文件并且xsi:schemaLocation中添加

  1. http://www.springframework.org/schema/task
http://www.springframework.org/schema/task 
  1. http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/task/spring-task.xsd

在spring中配置Executor

在ApplicationContext.xml文件里面添加

  1. <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  2. <!-- 核心线程数 -->
  3. <property name="corePoolSize" value="${task.core_pool_size}" />
  4. <!-- 最大线程数 -->
  5. <property name="maxPoolSize" value="${task.max_pool_size}" />
  6. <!-- 队列最大长度 -->
  7. <property name="queueCapacity" value="${task.queue_capacity}" />
  8. <!-- 线程池维护线程所允许的空闲时间,默认为60s -->
  9. <property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />
  10. </bean>
  11. <!-- 注解式 -->
  12. <task:annotation-driven />
  1.  
    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  2.  
    <!-- 核心线程数 -->
  3.  
    <property name="corePoolSize" value="${task.core_pool_size}" />
  4.  
    <!-- 最大线程数 -->
  5.  
    <property name="maxPoolSize" value="${task.max_pool_size}" />
  6.  
    <!-- 队列最大长度 -->
  7.  
    <property name="queueCapacity" value="${task.queue_capacity}" />
  8.  
    <!-- 线程池维护线程所允许的空闲时间,默认为60s -->
  9.  
    <property name="keepAliveSeconds" value="${task.keep_alive_seconds}" />
  10.  
    </bean>
  11.  
    <!-- 注解式 -->
  12.  
    <task:annotation-driven />

在dbconfig.properties添加

  1. maxOpenPreparedStatements=20
  2. removeAbandoned=true
  3. removeAbandonedTimeout=1800
  4. logAbandoned=true
  1.  
    maxOpenPreparedStatements=20
  2.  
    removeAbandoned=true
  3.  
    removeAbandonedTimeout=1800
  4.  
    logAbandoned=true

这是分别对线程池做配置

 

添加依赖注入

在所需要的service或者controller类里面添加

  1. @Resource(name = "taskExecutor")
  2. private TaskExecutor taskExecutor;
  1.  
    @Resource(name = "taskExecutor")
  2.  
    private TaskExecutor taskExecutor;

使用线程池进行并发操作

代码如下

  1. taskExecutor.execute(new Runnable() {
  2. @Override
  3. public void run() {
  4. // TODO Auto-generated method stub
  5. try {
  6. //要进行的并发操作
  7. } catch (Exception e) {
  8. // TODO Auto-generated catch block
  9. e.printStackTrace();
  10. }
  11. }
  12. });
  1.  
    taskExecutor.execute(new Runnable() {
  2.  
     
  3.  
    @Override
  4.  
    public void run() {
  5.  
    // TODO Auto-generated method stub
  6.  
    try {
  7.  
    //要进行的并发操作
  8.  
    } catch (Exception e) {
  9.  
    // TODO Auto-generated catch block
  10.  
    e.printStackTrace();
  11.  
    }
  12.  
    }
  13.  
    });

 

提示

注意在线程中操作变量时候变量的作用域范围。需要在这个controller或者sevice中声明变量如下
  1. @Controller
  2. public class IndexController {
  3. int studentscount = 0;
  4. @RequestMapping(value = "/index.html")
  5. public ModelAndView goIndex() {
  6. logBefore(logger, "列表Center");
  7. ModelAndView mv = this.getModelAndView();
  8. taskExecutor.execute(new Runnable() {
  9. @Override
  10. public void run() {
  11. // TODO Auto-generated method stub
  12. // 得到所有学生人数
  13. try {
  14. studentscount = coursesService.getStudentCount(pd);
  15. } catch (Exception e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. }
  20. });
  21. mv.addObject("studentscount", studentscount);
  22. mv.setViewName("common/index");
  23. return mv;
    1.  
      @Controller
    2.  
      public class IndexController {
    3.  
      int studentscount = 0;
    4.  
      @RequestMapping(value = "/index.html")
    5.  
      public ModelAndView goIndex() {
    6.  
      logBefore(logger, "列表Center");
    7.  
      ModelAndView mv = this.getModelAndView();
    8.  
      taskExecutor.execute(new Runnable() {
    9.  
       
    10.  
      @Override
    11.  
      public void run() {
    12.  
      // TODO Auto-generated method stub
    13.  
      // 得到所有学生人数
    14.  
      try {
    15.  
      studentscount = coursesService.getStudentCount(pd);
    16.  
      } catch (Exception e) {
    17.  
      // TODO Auto-generated catch block
    18.  
      e.printStackTrace();
    19.  
      }
    20.  
       
    21.  
      }
    22.  
      });
    23.  
      mv.addObject("studentscount", studentscount);
    24.  
      mv.setViewName("common/index");
    25.  
      return mv;
    26.  

spring线程池的应用的更多相关文章

  1. Spring线程池开发实战

    Spring线程池开发实战 作者:chszs,转载需注明. 作者博客主页:http://blog.csdn.net/chszs 本文提供了三个Spring多线程开发的例子,由浅入深,由于例子一目了然, ...

  2. Spring线程池配置模板设计(基于Springboot)

    目录 线程池配置模板 基础的注解解释 常用配置参数 配置类设计 线程池使用 ThreadPoolTaskExecutor源码 线程池配置模板 springboot给我们提供了一个线程池的实现,它的底层 ...

  3. Spring线程池ThreadPoolTaskExecutor配置及详情

    Spring线程池ThreadPoolTaskExecutor配置及详情 1. ThreadPoolTaskExecutor配置 <!-- spring thread pool executor ...

  4. 分享知识-快乐自己:Spring线程池配置

    Spring通过ThreadPoolTaskExecutor实现线程池技术,它是使用jdk中的Java.util.concurrent.ThreadPoolExecutor进行实现. Spring 配 ...

  5. Spring线程池由浅入深的3个示例

    作者博客主页:http://blog.csdn.net/chszs 本文提供了三个Spring多线程开发的例子,由浅入深,由于例子一目了然,所以并未做过多的解释.诸位一看便知. 前提条件: 1)在Ec ...

  6. 【SSM Spring 线程池 OJ】 使用Spring线程池ThreadPoolTaskExecutor

    最近做的Online Judge项目,在本地判题的实现过程中,遇到了一些问题,包括多线程,http通信等等.现在完整记录如下: OJ有一个业务是: 用户在前端敲好代码,按下提交按钮发送一个判题请求给后 ...

  7. spring线程池的同步和异步(1)

    spring线程池(同步.异步) 一.spring异步线程池类图 二.简单介绍 2.1. TaskExecutor---Spring异步线程池的接口类,其实质是java.util.concurrent ...

  8. 007-多线程-JUC线程池-Spring线程池配置、池子如何配置参数

    一.概述 Spring通过ThreadPoolTaskExecutor实现线程池技术,它是使用jdk中的Java.util.concurrent.ThreadPoolExecutor进行实现. 1.1 ...

  9. JDK线程池和Spring线程池的使用

    JDK线程池和Spring线程池实例,异步调用,可以直接使用 (1)JDK线程池的使用,此处采用单例的方式提供,见示例: public class ThreadPoolUtil { private s ...

  10. spring线程池配置

    源自:http://zjriso.iteye.com/blog/771706 1.了解 TaskExecutor接口 Spring的TaskExecutor接口等同于java.util.concurr ...

随机推荐

  1. 【转】如何使用jupyter编写数学公式(译)

    [1.如何使用jupyter编写数学公式(译)][1] [1]: https://www.jianshu.com/p/93ccc63e5a1b

  2. 2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)

    第二次面试 HTML HTML5中的新标签,举例一下 canvas绘画,本地离线存储localStorage,sessionStorage,video和audio元素,语义化元素,表单类型(date, ...

  3. 【转】CCS5.5从硬盘读入.dat数据格式的单张图像

    首页 博客 学院 CSDN学院                            下载 论坛 APP CSDN                            问答 商城 活动 VIP会员 ...

  4. [ipsec] 特别硬核的ike/ipsec NAT穿越机制分析

    〇 前言 这怕是最后一篇关于IKE,IPSEC的文字了,因为不能没完没了. 所以,我一直在想这个标题该叫什么.总的来说可以将其概括为:IKE NAT穿越机制的分析. 但是,同时它也回答了以下问题: ( ...

  5. Yarn Nodemanager启动不了报YarnRuntimeException: Failed to initialize container executor error=13 权限不够

    1.现象:有一个节点的NodeManager启动不了. 后台报错日志如下: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Failed ...

  6. hive介绍及架构设计

    hive介绍及架构设计 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道MapReduce和Spark它们提供了高度抽象的编程接口便于用户编写分布式程序,它们具有极好的扩展性 ...

  7. Minio对象存储

    目录 Minio对象存储 1.概述 2.功能特性 3.2.多节点 3.3.分布式 4.分布式minio集群搭建 4.1.集群规划 4.3.编写集群启动脚本(所有节点) 4.4.编写服务脚本(所有节点) ...

  8. 零基础如何学好Python 之int 数字整型类型 定义int()范围大小转换

    本文主题是讲python数字类型python int整型使用方法及技巧.它是不可变数据类型中的一种,它的一些性质和字符串是一样的,注意是整型不是整形哦. Python int有多种数字类型:整型int ...

  9. MyBatis-Plus-Generator配置

    本文仅对使用MyBatis-Plus的代码生成器配置做保存,适合使用了该插件的童鞋做参考. 内部有大量默认配置,有性趣的童鞋可以研究下源码. ps:官方文档更齐全http://mp.baomidou. ...

  10. RabbitMQ 关键词

    RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. RabbitMQ中间件分为服务端(RabbitMQ Server)和客户端 ...