`
叶落黄昏
  • 浏览: 17596 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

使用spring的多线程机制

阅读更多

多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性。具体来说如何使用spring来处理并发事务:


首先编写具体的事务逻辑,实现Runnable接口,比如说



package com.andy.threadDemo;

public class ThreadTransCode implements Runnable{ 
    
  @Override
  public void run() {
    System.out.println("执行事务" ); 
  }
}
然后要做的就是配置spring容器本身提供的线程池任务执行器:
< bean id ="taskExecutor"
    class ="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >

    < property name ="corePoolSize" value ="3" />

    < property name ="keepAliveSeconds" value ="200" />

    < property name ="maxPoolSize" value ="5" />

    < property name ="queueCapacity" value ="25" />

  </ bean >
配置过程中主要关注于四个属性的配置
接下来要做的事就是在应用系统本身的业务bean中使用线程池任务执行器来执行并发事务。
在对应的业务bean中注入线程池任务执行器,像普通的spring bean一样。
< bean id ="bizManager"
      class ="com.andy. threadDemo.BizManager" >
      < property name ="taskExecutor " >
        < ref bean ="taskExecutor " />
      </ property >

</ bean >
在业务代码中,通常以for循环的方式执行多个事务
for (int k = 0; k < n; k++) {    
        taskExecutor.execute(new ThreadTransCode());    
    }
其它繁琐的线程管理的事情就交给执行器去管理。
值得注意的事有两点
1, taskExecutor.execute(new  ThreadTransCode());  激活的线程都是守护线程,主线程结束,守护线程就会放弃执行,这个在业务中式符合逻辑的,在单元测试中为了看到执行效果,需要自行阻塞主线程。
2, taskExecutor.execute(new  ThreadTransCode());    的执行也不是完全安全的,在执行的过程中可能会因为需要的线程查过了线程队列的容量而抛出运行时异常,如有必要需要捕获。


分享到:
评论

相关推荐

    spring 多线程队列执行

    在Spring框架中,多线程队列执行是一个重要的性能优化策略,它可以帮助应用程序更高效地处理并发任务,尤其是在高负载和大数据量的场景下。本文将深入探讨Spring如何实现多线程队列以及其相关的核心概念和技术。 1....

    java中spring里实现多线程

    当我们谈到在Spring中实现多线程,实际上是在讨论如何在Spring环境中创建、管理和协调并发执行的任务。这涉及到Java的并发API以及Spring对这些API的包装和扩展。 首先,让我们了解Java中的多线程基础。在Java中,...

    Spring 异步多线程动态任务处理的使用心得

    本文将深入探讨在Spring中如何利用多线程和动态任务来实现异步处理,并分享一些实践心得。 首先,我们要理解Spring的异步处理机制。Spring通过`@Async`注解实现了方法级别的异步执行。当一个带有`@Async`的方法被...

    spring4+junit4.8 +多线程TheadTool

    在多线程环境下,Spring4提供了一套完善的上下文管理机制,使得线程安全的bean管理变得更加简单。 2. **Junit4.8**:JUnit4.8是一个针对Java的单元测试框架,它的主要特性包括注解(@Test)、参数化测试、异常断言...

    多线程分别下载文件

    在Android开发中,多线程技术常常用于提升应用程序的性能,特别是在处理耗时操作,如文件下载时。这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行...

    详解Spring-Boot中如何使用多线程处理任务

    需要注意的是,在 Spring Boot 项目中,多线程处理任务需要注意线程安全问题,例如使用线程安全的集合、锁机制等,以避免出现线程安全问题。 此外,在使用多线程处理任务时,需要注意线程池的使用,避免创建过多的...

    java 后端学习资料包含(spring,多线程).zip

    总之,"java 后端学习资料包含(spring,多线程)"这个资料包是Java开发者深入学习和提升的宝贵资源,无论是对于Spring框架的使用还是多线程技术的掌握,都将带来实质性的进步。通过学习和实践,开发者可以更好地应对...

    spring-boot-multithreading.zip_spring boot_多线程

    总结起来,Spring Boot通过其对Java并发库的支持和自身提供的异步处理机制,使得开发人员能轻松地在应用中引入多线程。通过合理配置线程池和使用`@Async`注解,可以有效地实现任务的并发执行,提高应用性能。在`...

    spring缓存机制-入门实例

    本篇文章将深入探讨Spring缓存机制的基础知识,并通过一个入门实例来阐述其工作原理和使用方法。 Spring缓存抽象是自Spring 3.1版本引入的,它提供了一个统一的API,支持多种缓存解决方案,如EhCache、Guava Cache...

    多线程及spring相关面试专题及答案.zip

    在IT行业中,多线程和Spring框架是两个非常重要的领域,尤其对于后端开发者来说,它们是必备的技术栈。下面将分别对这两个主题进行详细的知识点解析。 **多线程** 1. **线程概念**:线程是操作系统分配CPU时间片的...

    spring boot中多线程开发的注意事项总结

    本文将深入探讨在Spring Boot中使用多线程开发需要注意的关键点。 首先,为了启用异步任务处理,我们需要在配置类上使用`@EnableAsync`注解,这使得Spring Boot能够识别并处理带有`@Async`注解的方法。例如: ```...

    基于Spring Batch的大数据量并行处理

    - **易于使用**:Spring Batch允许开发者将精力集中在业务逻辑上,而无需过多关注底层的线程管理和资源调度。 - **模块化设计**:该框架采用了高度模块化的设计,可以灵活地与其他Spring组件或者第三方工具进行集成...

    线程中获取spring 注解bean

    线程中的操作往往涉及到多线程环境下的资源共享和管理,因此,如何在线程中正确地获取并使用Spring通过注解注入的对象,是一个常见的问题。本文将详细探讨这个主题。 首先,Spring的注解主要分为三类:配置注解(如...

    多线程demo程序-轻松掌握多线程技术

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...

    定时任务启动多线线程示例

    注意,使用多线程需要注意线程安全问题,比如共享资源的访问控制、同步机制以及异常处理。同时,合理配置线程池参数以确保系统的稳定性和性能。 总结起来,Spring定时任务结合多线程可以有效地提高系统的并发能力,...

    基于Spring+Ibatis的安全线程实现

    4. **线程池管理**:Spring提供ThreadPoolTaskExecutor,我们可以自定义线程池配置,比如核心线程数、最大线程数、队列长度等,以优化多线程执行效率,并通过设置RejectedExecutionHandler处理拒绝策略。 5. **事务...

    springboot多线程demo

    在Spring Boot框架中,多线程的使用是一个重要的性能优化手段。Spring Boot简化了Java企业级应用的开发,包括对多线程的支持。本项目"springboot多线程demo"显然是一个示例,用于演示如何在Spring Boot应用中实现和...

    解决Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程问题

    在本文的背景中,使用Redis作为存储方式时,由于Spring Session的监听机制,可能会导致创建大量的redisMessageListenerContainer线程。这种情况往往发生在客户端频繁地触发会话变化或更新时,会话的监听器会不断产生...

    spring boot《Java课程》多线程教学演示系统(011733)

    在本课程中,"Spring Boot《Java课程》多线程教学演示系统(011733)",我们将深入探讨Java编程语言的核心特性之一——多线程,并结合Spring Boot框架构建一个实际的教学演示系统。这个系统将帮助我们理解如何在现代...

    多线程精品资源--novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发.zip

    2. 使用Spring Boot 3进行多线程编程的方法和最佳实践。 3. 如何利用Vue 3优化前端性能,尤其是在处理大量数据时。 4. 可能包含的代码示例将展示如何在Spring Boot应用中集成Vue 3,以及如何在前后端之间处理并发...

Global site tag (gtag.js) - Google Analytics