SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)
有时我们的系统需要进行一些比较耗时的操作,比如用户注册后要调用邮件服务器给用户发送个邮件,又比如上传一个大数据量的 excel 并导入到数据库。如果后端的这些工作比较耗时,那么前台的页面便会一直处于等待状态,让用户会以为页面卡死了。
通常这种比较耗时的操作应该做异步处理,也就是在后台进行,而用户可以不用等待。下面通过样例演示 Spring Boot 中如何执行异步任务。
1,开启线程池
这里我们使用 java 线程池 ExecutorService,首先在项目中添加如下配置类,其作用在于 Spring 启动时自动加载一个 ExecutorService 对象。
1 2 3 4 5 6 7 8 |
|
2,创建异步任务
这里我们实现 Runnable 接口来创建一个异步任务,里面代码很简单,就是等待个 5 秒再结束:
注意:Runnable 和 Callable 在异步任务中的应用差别在于,一个不带返回值,一个带返回值而已。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
3,执行异步任务
(1)这里我们在一个 Cotroller 中通过线程池执行这个异步任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_2720.html
SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)相关推荐
- ExecutorService线程池
ExecutorService 建立多线程的步骤: 1.定义线程类 class Handler implements Runnable{ } 2.建立ExecutorService线程池 Execut ...
- Executors源码解读——创建ExecutorService线程池
Executors源码解读--创建ExecutorService线程池 〇.[源码版本] jdk 1.8 一.线程池概述 二.线程池创建 三.Executors源码解读 newFixedThreadP ...
- java 线程池的使用_Java 使用线程池执行若干任务
在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...
- Android性能优化之使用线程池处理异步任务
说到线程,我想大家都不陌生,因为在开发时候或多或少都会用到线程,而通常创建线程有两种方式: 1.继承Thread类 2.实现Runnable接口 虽说这两种方式都可以创建出一个线程,不过它们之间还是有 ...
- Java等线程池执行完所有任务后再执行主线程
2019独角兽企业重金招聘Python工程师标准>>> 因为要定时往数据库插入上百万数据,插入完之后再修改另外一部分数据, 怎么在线程池执行完所有任务后再执行主线程呢 import ...
- 通俗易懂,常用线程池执行的-流程图
转载自 通俗易懂,常用线程池执行的-流程图 有时候花了大把时间去看一些东西却看不懂,是很 " 蓝瘦 " 的,花时间也是投资. 本文适合: 曾了解过线程池却一直模模糊糊的人 了解得 ...
- 并发编程之进程池,线程池 和 异步回调,协程
1.进程池和线程池 2.异步回调 3.协程 4.基于TCP使用多线程实现高并发 一.进程池和线程池 什么是进程池和线程池: ''' 池 Pool 指的是一个容器 线程池就是用来存储线程对象的 容器创建 ...
- java 等待线程/线程池执行完毕
1.单线程开始并执行完毕 当线程开始后,需要用到join的方法 不废话直接贴代码 public static void main(String args[]) {long begin = System ...
- 【Java 并发编程】线程池机制 ( 线程池执行任务细节分析 | 线程池执行 execute 源码分析 | 先创建核心线程 | 再放入阻塞队列 | 最后创建非核心线程 )
文章目录 一.线程池执行任务细节分析 二.线程池执行 execute 源码分析 一.线程池执行任务细节分析 线程池执行细节分析 : 核心线程数 101010 , 最大小成熟 202020 , 非核心线 ...
最新文章
- html恢复按钮按下前的状态,如何通过点击按钮暂停和恢复html页面的执行
- sql,nolock
- main()与_tmain()区别
- 英利1500伏光伏组件系列亮相美国
- 服务器最小化安装后的优化脚本
- 存储过程与函数oracle
- Create view failed with ORA-01031:insufficient privileges
- 6-4-2:STL之list——list的模拟实现
- Python 3 从入门到精通 Mac OS
- 计算机平面设计是计算机类吗,计算机平面设计是什么?平面设计就业前景怎么样?...
- php 返回英文乱码,使用php 5时MySQL返回乱码的解决办法_php
- Bugku:Snowfall
- 2018年度最优秀mac软件及游戏推荐,个个万里挑一
- 排序算法——十大排序算法总结与对比
- GRUB2命令和环境变量列表
- Android 绘制数字向上向下滚动的动画
- Minecraft 1.16.5模组开发(五十) 书籍词典 (Guide Book)
- 输出N阶方阵 ,输出该方阵及方阵主对角线的总和
- 防百度地图上下拖动View
- Nett源码剖析(1)NioEventloopGroup的创建2021SC@SDUSC
热门文章
- android 动画坐标,Android 动画之TranslateAnimation应用详解
- Leetcode每日一题:287.find-the-duplicate-number(寻找重复数)
- 吴恩达深度学习(一)-第三周:Planar data classification with one hidden layer
- matlab练习程序(共生矩阵)
- IntelliJ IDEA 创建Java Web项目
- [暴力]JZOJ 5842 a
- Logstash+Kibana+多ElasticSearch集群部署
- spirng底层实现原理
- LeetCode刷题(40)--Search a 2D Matrix
- GitHub Desktop理解与入门