springboot如何使用多线程,线程池管理
在原生java中,创建和启动线程的方式大致有以下几种:
- 继承Thread类,然后重写run方法
- 实现Runnable接口,并重写run方法
- 匿名内部类
Thread thread = new Thread(new Runnable() {@Overridepublic void run() {// 线程实现}});thread.start();
- lambda表达式
new Thread(()->{// 线程实现}).start();
在springboot中,推荐使用线程池的方式来管理多线程。
首先,添加配置类:
@Configuration
@EnableAsync
public class ThreadPoolConfig {/*** 核心线程池大小50*/private static final int CORE_POOL_SIZE = 10;/*** 最大可创建的线程数200*/private static final int MAX_POOL_SIZE = 10;/*** 队列最大长度1000*/private static final int QUEUE_CAPACITY = 10;/*** 线程池维护线程所允许的空闲时间300*/private static final int KEEP_ALIVE_SECONDS = 300;/*** 异步执行方法线程池** @return*/@Bean(name = "asyncExecutor")public ThreadPoolTaskExecutor eventExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setMaxPoolSize(MAX_POOL_SIZE);executor.setCorePoolSize(CORE_POOL_SIZE);executor.setQueueCapacity(QUEUE_CAPACITY);executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS);// 线程池对拒绝任务(无线程可用)的处理策略executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}
}
这里需要特别注意类上的两个注解,@Configuration声明当前类为一个配置类,@EnableAsync开启对异步任务的支持。
接着,在service实现方法上添加注解@Async("asyncExecutor")
,这里的asyncExecutor对应config里面的执行器名称。
关于添加了@Async
注解,但是没事异步执行线程方法的情况貌似还有点多,主要是大家没有按照规范来使用,或者没有注意到一些细节点。
下面总结一些常见的易错点:
- 添加
@EnableAsync
注解,开启异步任务支持 - 异步方法必须是public且void(或Future)
- 异步方法所在的类必须添加@Component或者其它注解,加入到容器中
- 调用者与被调用者在同一个类中,且直接调用。这种情况和spring的事务一样,都是通过aop实现的,所以一定要用代理类的方法才能够实现。如果调用者和被调用者都在同一个类中,使用spring上下文,获取到对应的代理类再执行异步方法。
springboot如何使用多线程,线程池管理相关推荐
- 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据
springboot篇章整体栏目: [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合toke ...
- JAVA线程池管理及分布式HADOOP调度框架搭建
平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...
- 【转】1.2异步编程:使用线程池管理线程
从此图中我们会发现 .NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言→C#5.0异步编程.现在我为 ...
- 异步编程:使用线程池管理线程
开始<异步编程:使用线程池管理线程> 示例程序:异步编程:使用线程池管理线程.rar 如今的应用程序越来越复杂,我们常常需要使用<异步编程:线程概述及使用>中提到的多线程技术来 ...
- 多线程线程池的实现java_如何在Java中实现线程池
多线程线程池的实现java 线程是独立程序的执行路径. 在java中,每个线程都扩展java.lang.Thread类或实现java.lang.Runnable. 多线程是指在一个任务中同时执行两个或 ...
- 多线程线程池的基本创建,使用方法
import java.util.concurrent.*;/*** 多线程线程池的基本创建,使用方法** @author silence*/ public class Silence {public ...
- Android多线程操作——线程池管理综述
1 前言 android开发,大家最熟悉的肯定是主线程,也就是ui线程,也都知道在非ui线程更新界面会报错提示不允许在子线程更新ui.但是耗时操作还是需要使用子线程,如: new Thread(new ...
- java搭建线程池框架,JAVA线程池管理及分布式HADOOP调度框架搭建
大家看到了线程的好处了吧!单线程需要10S,10个线程只需要1S.充分利用了系统资源实现并行计算.也许这里会产生一个误解,是不是增加的线程个数越多效率越高.线程越多处理性能越高这个是错误的,范式都要合 ...
- Java多线程 线程池Executor框架
目录 一.说明 二.理解 Executor ExecutorService Executors 三.实现 1. newSingleThreadExecutor 2. newFixedThreadPoo ...
最新文章
- 她是直播聊学习成“网红”的北大博士,毕业后入职民办学校,年薪70万
- 边缘计算 — 商业模式
- 《OpenGL编程指南》一第2章 着色器基础
- C#中的委托,匿名方法和Lambda表达式
- 阿里Java开发规约(2)
- 网页效果图设计之色彩索引
- OpenGL-渲染管线的流程(有图有真相)
- 004_Spring Data JPA根据实例查询数据
- 意想不到的有趣linux命令
- PyQt:成功解决PyQt4升级到PyQt5改变的函数或方法
- SQL:使用 CASE
- 从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较
- 独轮车(广搜_队列)
- MySQL 基数的定义
- CnForums1.0 Alpha RC1 发布
- 如何选择HR人事管理软件?HR人事管理系统软件有哪些
- java sockets_Java Sockets
- 掌上题库V1.2.2全开源版本
- 直播软件开发公司来告诉你什么是互动直播
- 如何平衡新老策略的好与坏,一道常见风控送命题解答
热门文章
- 保护REST API / Web服务的最佳实践[关闭]
- win11搜索位置在哪 Windows11搜索位置的设置方法
- 基于TCP协议的Socket通信,实现文件断点续传
- Linux下nginx的安装及部署
- 监管大屏系统_“警视” 警务情指一体大屏可视化决策系统
- java 协议开发_用Java的NIO开发网络协议
- 文本属性之文本颜色(CSS、HTML)
- MySQL安装教程及配置环境变量(建议收藏)
- 游戏本自动掉帧_机 · 科普帖丨如何在夏天告别游戏掉帧的问题
- android 8.0 以后 uiautomator 无法直接使用的问题