`

SpringBoot启动多线程

 
阅读更多

新建一个线程池的配置类,需要被spring扫描到。

@Configuration
@EnableAsync
public class ThreadExecutorConfig {

    @Bean
    public Executor executor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);//线程池维护线程的最少数量
        executor.setMaxPoolSize(50);//线程池维护线程的最大数量
        executor.setQueueCapacity(15);//缓存队列
        executor.setThreadNamePrefix("ssmsExecutor-");
        /**
         * 对拒绝task的处理策略
         rejection-policy:当pool已经达到max size的时候,如何处理新任务
         CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
         */
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.setKeepAliveSeconds(60);//允许的空闲时间
        executor.initialize();
        return executor;
    }

}

 添加一个普通类,里面编写需要执行的方法,方法加上@Async注解,调用方法时自动启动线程。

@Component
public class BmtOrderThread {
	
	@Async
	public Future<Map<String,Object>> test1() {
		Map<String,Object> result=new HashMap<String,Object>();
		return new AsyncResult<>(result);
	}
	
	@Async
	public void test2() {
		System.out.println("hello");
	}
}

 调用有返回值的线程方法:

public static void main(String[] args) {	
	List<Future<Map<String,Object>>> futures = new ArrayList<>();//存线程的返回结果
    
    //以下调用会启动线程进行执行,多线程并发	
	Future<Map<String,Object>> res1=bmtOrderThread.test1();
	futures.add(res1);
	Future<Map<String,Object>> res2=bmtOrderThread.test1();
	futures.add(res2);
	
	//会等待所有线程都执行结束,拿到结果	
	try {
		for(Future future:futures) {
			Object obj=future.get();
			Map<String,Object> result=(Map<String,Object>)obj;
		}
	} catch(Exception e) {
		e.printStackTrace();
	}
}

 调用无返回值的线程方法:

public static void main(String[] args) {
	//以下方法会启动多线程,并发执行
	bmtOrderThread.test1();
	bmtOrderThread.test1();
	bmtOrderThread.test1();
}

 

参考的博客:

https://blog.csdn.net/qq_39385706/article/details/79365849

https://blog.csdn.net/weixin_38399962/article/details/82146480

https://www.cnblogs.com/guyezhai/p/5776357.html

分享到:
评论

相关推荐

    多线程分别下载文件

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

    springBoot+springBatch批量处理数据demo

    SpringBoot简化了Spring应用程序的配置和启动过程,而SpringBatch则是一个强大的批处理框架,它提供了丰富的功能来处理大规模数据。 首先,SpringBoot是基于Spring框架的一个快速开发工具,它通过内嵌的Tomcat...

    Spring Boot如何优雅的使用多线程实例详解

    在Spring Boot应用中,优雅地使用多线程可以显著提高应用程序的并发性能,尤其是在处理大量并发请求时。这里我们将深入探讨如何使用Spring Boot的异步处理功能,即通过`@Async`注解来实现多线程。首先,我们需要在...

    解决SpringBoot2多线程无法注入的问题

    然而,在多线程环境中,由于线程的并发性和独立性,直接在线程类中使用@Autowired注解进行Bean注入可能会出现问题。这是因为Spring的容器并不直接管理这些线程,而是由应用程序创建和启动,导致Spring无法在创建线程...

    03-SpringBoot启动过程源码解析-周瑜.pdf

    SpringBoot启动过程可以分为多个阶段,包括构造SpringApplication对象、推测Web应用类型、获取BootstrapRegistryInitializer对象、获取ApplicationContextInitializer对象、获取ApplicationListener对象、推测出Main...

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

    在Spring Boot中,多线程开发是提升应用性能和并发能力的重要手段。Spring Boot通过`TaskExecutor`接口提供了一种方便的方式来实现多线程和并发编程。`TaskExecutor`允许我们定义一个线程池,有效地管理和调度线程...

    Spring Boot多线程demo

    要使用 @Async 注解,首先需要在 Spring Boot 启动类上加上 @EnableAsync 注解,这样 Spring Boot 才会支持多线程编程。然后,在需要异步执行的方法上加上 @Async 注解,这样该方法就会被异步执行。 启用多线程支持...

    kafka demo ,两种线程消费方式

    在这个示例中,我们将关注如何使用Java API在Kafka中实现多线程消费,以及单个消费者组内的多线程消费。 首先,我们了解Kafka的基本概念。Kafka是一个发布/订阅模型的消息队列,它包含生产者(Producer)、消费者...

    SpringBoot+jsoup爬虫

    6. **优化和扩展**:为了提高效率,可以考虑多线程爬取,或者使用异步处理。此外,可以增加重试机制,避免因临时网络问题而丢失数据。 7. **部署与测试**:完成后,将SpringBoot应用打包成可执行的JAR文件,部署到...

    SpringBoot事务使用及回滚实现代码详解

    在SpringBoot中,事务的使用需要在启动类上添加@EnableTransactionManagement注解,以开启事务支持。然后,在需要使用事务的public方法或类上添加@Transactional注解,以标记事务的开始和结束。 在实际使用中,通常...

    【java框架】SpringBoot(4)--SpringBoot实现异步、邮件、定时任务(csdn)————程序.pdf

    1. **开启异步支持**:首先,你需要在SpringBoot的主启动类上添加`@EnableAsync`注解,这样Spring会自动配置一个AsyncConfigurer,用来处理异步任务。 ```java @SpringBootApplication @EnableAsync public class ...

    大数据量多线程执行分页查询

    多线程技术与分页查询相结合,可以有效地解决这一问题,提高系统性能并优化用户体验。以下是对标题和描述中涉及知识点的详细解释: 1. **大数据量处理**:当数据库中的数据达到百万甚至亿级时,单线程查询可能导致...

    59-Spring Boot内嵌Tomcat配置1

    例如,增加最大线程数可以处理更多的并发请求,但也会占用更多内存。配置这些参数时需要根据实际应用负载和服务器资源进行平衡。 总之,Spring Boot 的内嵌 Tomcat 容器提供了强大的可配置性,允许开发者根据需求...

    springboot整合kafka,指定分区发送,批量消费,指定topic分区消费

    为了实现批量消费多个topic,我们可以创建一个`@KafkaListener`注解的消费者方法,同时监听多个topic: ```java @Autowired private KafkaListenerContainerFactory, String&gt;&gt; kafkaListenerContainerFactory; @...

    springboot启动时执行任务的设置.docx

    在实际开发中,你可能还需要考虑线程安全问题,特别是当这些启动任务涉及到共享资源或数据库操作时。你可以使用`@Async`注解来异步执行这些任务,以避免阻塞应用的启动过程。 此外,Spring Boot还支持通过配置文件...

    Springboot多连接池+websocket

    本项目涉及的关键技术是“Springboot多连接池”和“WebSocket”,这两个概念都是现代Web应用程序的重要组成部分。 首先,让我们来理解Spring Boot中的多连接池。在处理大量并发请求时,数据库连接池是必不可少的,...

    Java Web项目中使用Socket通信多线程、长连接的方法

    这里我们将深入探讨如何在Java Web环境中利用多线程和长连接技术实现Socket通信。 首先,为了在Web应用启动时初始化Socket监听,我们可以创建一个实现了`ServletContextListener`接口的类,如`AttendSocetListener`...

    springboot 定时任务(线程配置,并行【同步】、异步等)

    在Spring Boot应用中,定时任务是一项非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务。Spring Boot集成了Spring Framework的...这使得在Spring Boot应用中处理定时任务和多线程问题变得更加简单高效。

    springboot入门,springboot-demo

    SpringBoot的自动配置是其一大亮点,它通过扫描`@EnableAutoConfiguration`注解启动的类,根据项目中的依赖来决定如何自动配置Bean。例如,如果你的项目中包含了JDBC的依赖,SpringBoot将自动配置DataSource和...

    SpringBoot-入门级简单源码

    本项目是基于SpringBoot的入门级示例,旨在帮助初学者快速掌握SpringBoot的基本用法以及与其他技术如Mybatis、多线程和定时任务的集成。 首先,我们来探讨**SpringBoot**。SpringBoot是由Pivotal团队提供的全新框架...

Global site tag (gtag.js) - Google Analytics