`

java中spring里实现多线程

阅读更多
  • Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的
  • 可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor
  • 在实际开发中由于多是异步,所以使用@EnableAsync来支持异步任务,且要在Bean的方法中使用@Async来声明其是一个异步任务

      以下实例:

  1.     配置类
    package com.zgw.taskexecutor;
    
    import java.util.concurrent.Executor;
    
    import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.AsyncConfigurer;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    
    @Configuration
    @ComponentScan("com.zgw.taskexecutor")
    @EnableAsync  //开启对异步任务的支持
    public class TaskExecutorConfig implements AsyncConfigurer {  
    	
    	/**
    	 * 通过实现AsyncConfigurer接口,重写getAsyncExecutor()方法,
    	 * 返回一个ThreadPoolTaskExecutor对象,这样实现一个基于线程池
    	 * TaskExecutor
    	 */
    	@Override
    	public Executor getAsyncExecutor() {
    		ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
    		taskExecutor.setCorePoolSize(10);
    		taskExecutor.setMaxPoolSize(20);
    		taskExecutor.setQueueCapacity(25);
    		taskExecutor.initialize();
    		return taskExecutor;
    	}
    
    	@Override
    	public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    		return null;
    	}
    
    	
    }
  2. 任务执行类

     

package com.zgw.taskexecutor;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncTaskService {
	
	@Async //声明是一个异步方法
    public void executeAsyncTaskOne(int i){
        System.out.println("执行异步任务: "+i);
    }

    @Async
    public void executeAsyncTaskTwo(int i){
        System.out.println("执行异步任务加1操作:"+(i+1));
    }

}

 

 

3.运行

package com.zgw.taskexecutor;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestExecutor {
	
	public static void main(String[] args) {
		//使用AnnotationConfigApplicationContext作为spring容器,
		//接收输入一个配置类作为参数
		 AnnotationConfigApplicationContext context =
	                new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
		 //获得声明配置的AsyncTaskService的Bean
		 AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class);
		 
		 for(int i =0 ;i<20;i++){
			 asyncTaskService.executeAsyncTaskOne(i);
			 asyncTaskService.executeAsyncTaskTwo(i);;
	        }
	        context.close();
	}
}

 

 

  运行结果如下:

 


 


 结果是并发执行而不是顺序执行的。

 

    

分享到:
评论

相关推荐

    spring boot注解事务+多线程

    本示例将深入探讨如何使用注解来实现事务控制以及如何在Spring Boot中运用多线程。 首先,让我们关注"注解事务"。在Spring框架中,我们主要依赖`@Transactional`注解来声明事务边界。当一个方法被这个注解标记时,...

    Spring的多线程应用

    在【压缩包子文件的文件名称列表】"SpringThreadDemo-master"中,我们可以预期这个项目包含了一个完整的Spring多线程示例。通常,这样的项目会包含以下部分: 1. `pom.xml`:Maven配置文件,包含了Spring框架和相关...

    JAVA零基础到高级进阶特训营 JAVA多线程并发设计+Spring高级+数据库开发+JAVA基础等

    这套课程既可以作为从零基础开始...课程的主要内容涉及有JAVA基础课程、JAVA多线程与并发编程、数据库开发基础和进阶、Spring Framework、Spring进阶、Spring MVC框架、Spring boot、Java常用类库、Java异常处理等等

    Java Spring多线程demo代码

    以下将详细介绍Java Spring中实现多线程的关键知识点,并结合"Java Spring多线程demo代码"的实践场景进行解析。 首先,Spring提供了`ThreadPoolTaskExecutor`,这是一个基于Java的`ThreadPoolExecutor`实现的任务...

    java简单分布式架构,多个数据源,线程池多线程访问

    本项目围绕“Java简单分布式架构,多个数据源,线程池多线程访问”这一主题展开,旨在通过利用Java技术栈实现一个高效的分布式系统。 首先,我们关注的是“分布式”这一概念。分布式系统是由多台计算机通过网络连接...

    java多线程处理数据库数据

    本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等操作。 首先,我们需要了解Java中的线程基础。线程是程序执行的最小单位,一个进程可以包含多...

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...

    HttpClient+ Spring实现多线程

    总的来说,HttpClient与Spring的结合使得在Java应用中实现高效、安全的多线程HTTP通信变得简单。通过正确配置和管理连接池,可以有效控制并发量,防止资源耗尽,同时利用Spring的容器特性简化代码和提高可维护性。

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

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

    java多线程导出excel(千万级别)优化

    Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...

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

    同时,Spring AOP也可以在多线程上下文中发挥作用,例如,我们可以在切面中实现线程安全的缓存或者记录每个线程的执行日志。此外,Spring框架还提供了`@Transactional`注解,用于声明式事务管理,这在多线程环境中尤...

    Java多线程之定时任务 以及 SpringBoot多线程实现定时任务——异步任务

    1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled

    spring 多线程队列执行

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

    Spring Boot多线程demo

    Spring Boot 中使用多线程的方式有很多种,最简单的方式就是使用 @Async 注解来实现。下面我们将详细介绍如何使用 @Async 注解来实现多线程编程。 多线程前言 在 Java 中,多线程编程是非常重要的一种技术,通过...

    spring-boot-multithreading.zip_spring boot_多线程

    本文将深入探讨Spring Boot如何实现多线程,并结合提供的`spring-boot-multithreading.zip`压缩包中的示例进行讲解。 首先,我们需要了解多线程的基本概念。在计算机程序中,线程是程序执行的最小单位,每个线程...

    JAVA+SPRING全掌握

    5. **多线程**: 线程同步、互斥、守护线程、线程池等概念。 6. **反射API**: 动态加载类、获取类信息、创建对象及调用方法。 7. **JVM**: 类加载机制、内存模型、垃圾回收、性能优化。 **Spring框架** 1. **依赖...

    java多线程+Socket实现的漂亮QQ

    ### Java多线程+Socket实现的漂亮QQ #### 技术要点分析 ##### 1. Java Swing Java Swing 是一个用于构建图形用户界面 (GUI) 的轻量级组件集,它为开发人员提供了丰富的功能来设计复杂的用户界面。在本项目中,...

    多线程导出Excel(百万级别)_Java版优化.zip

    用开源 Apache POI 技术导出Excel,解决导出大数据出现OOM、栈溢出问题,此资源可实现百万级数据多线程分批导出Excel文件,不会内存溢出,生产环境已很稳定的使用者,所以用到的技术很核心、值得参考

    maven管理的Spring多线程任务demo

    本示例"maven管理的Spring多线程任务demo"着重展示了如何在Spring框架中利用Maven进行项目构建,并实现多线程任务处理。在SSM(Spring、SpringMVC、MyBatis)框架背景下,如果你已经有所了解,那么这个例子将帮助你...

Global site tag (gtag.js) - Google Analytics