Java异步编程
Java异步编程
- 1、什么是java异步编程
- 2、异步编程有什么作用
- 3、异步编程常用于哪些业务
- 4、异步编程的方式
- 5、@Async异步调用
- @Async简介
1、什么是java异步编程
- Java异步编程是一种处理并发问题的技术,它可以在执行耗时操作的同时,不阻塞主线程,从而提高程序的性能和响应速度。
- 在传统的同步编程中,程序需要等待一个操作完成后才能继续执行下一个操作,这样可能会导致程序阻塞,降低程序的性能和响应速度。
- 而异步编程则可以让程序在执行一个耗时操作的同时,继续执行其他操作,从而提高程序的并发能力和响应速度。
2、异步编程有什么作用
Java异步编程可以带来以下几个方面的作用:
-
提高程序性能和响应速度:异步编程可以让程序在执行一个耗时操作的同时,继续执行其他操作,从而提高程序的并发能力和响应速度。
-
改善用户体验:异步编程可以让程序在执行一些耗时操作时,不会导致界面卡死,从而改善用户的使用体验。
-
提高资源利用率:异步编程可以让程序在等待一个操作完成时,可以继续执行其他操作,从而提高资源的利用率。
-
实现多任务并行处理:异步编程可以让程序同时处理多个任务,从而提高程序的并行处理能力。
-
简化程序逻辑:异步编程可以让程序的代码更加简洁,避免使用繁琐的回调函数和线程管理代码,提高程序的可读性和可维护性。
Java异步编程可以提高程序的性能和响应速度,改善用户的使用体验,提高资源的利用率,实现多任务并行处理,并简化程序的逻辑。
3、异步编程常用于哪些业务
Java异步编程通常应用于以下几个业务场景:
-
网络通信:网络通信是一个比较耗时的操作,使用异步编程可以在等待网络通信结果的同时,继续执行其他操作,提高程序的响应速度。
-
数据库操作:数据库操作也是一个比较耗时的操作,使用异步编程可以在等待数据库操作结果的同时,继续执行其他操作,提高程序的并发能力和响应速度。
-
文件操作:文件读写操作也是一个比较耗时的操作,使用异步编程可以在等待文件读写结果的同时,继续执行其他操作,提高程序的并发能力和响应速度。
-
图像处理:图像处理通常需要大量的计算和I/O操作,使用异步编程可以将这些操作异步处理,提高程序的性能和响应速度。
-
音视频处理:音视频处理也是一个比较耗时的操作,使用异步编程可以在等待音视频处理结果的同时,继续执行其他操作,提高程序的并发能力和响应速度。
Java异步编程可以应用于各种需要耗时操作的业务场景,通过异步处理可以提高程序的并发能力和响应速度,从而提升用户的使用体验。
4、异步编程的方式
Java异步编程的方式有以下几种:
-
回调函数:回调函数是一种基于接口的编程方式,可以在异步操作完成后调用回调函数来处理异步操作的结果。
-
Future/Promise
:Future/Promise是一种将异步操作的结果封装到Future对象中,可以通过Future对象来获取异步操作的结果。 -
CompletableFuture
:CompletableFuture是Java 8中引入的一种基于Future的异步编程方式,支持链式调用和组合异步操作,使得异步编程更加简单和灵活。 -
RxJava
:RxJava是一个基于响应式编程的Java库,支持异步和并发编程,可以简化异步编程的复杂性。 -
Actor
模型:Actor模型是一种基于消息传递的并发编程模型,每个Actor都是一个独立的执行单元,通过消息传递来实现异步操作。
Java异步编程可以使用多种方式来实现,每种方式都有其优点和适用场景,根据具体的业务需求选择合适的异步编程方式可以提高程序的性能和响应速度。
5、@Async异步调用
这里详细说明以下使用spring
中@Async
的异步调用。
@Async简介
@Async
是Spring框架中提供的一种注解,用于将方法标记为异步执行,让方法在新的线程中执行,从而实现异步调用。
使用@Async注解需要满足以下条件:
-
必须在
Spring
应用程序上下文中使用。 -
必须在异步方法所在的类上添加
@EnableAsync
注解。 -
异步方法必须是
public
方法。 -
异步方法必须返回void或者
Future
对象。 -
如果返回Future对象,则必须确保
Future
对象在异步方法执行完成后能够正确返回异步方法的结果。
简单示例: 如下定义了一个异步执行配置类,主要是通过Spring提供的 @EnableAsync
注解开启异步执行的支持,同时使用 @Bean
注解注册了一个线程池 getAsyncExecutor
,该线程池可以用于异步执行任务,包括一些比较耗时的操作,例如发送邮件、处理图片等,从而避免在主线程中执行这些任务导致系统响应变慢。
@Configuration
@EnableAsync
public class AppConfig implements AsyncConfigurer {// 配置相关Bean@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(3);executor.setMaxPoolSize(10);executor.setQueueCapacity(30);executor.setThreadNamePrefix("MyExecutor-");executor.initialize();return executor;}
}
在上述配置中,定义了一个核心线程数为3,最大线程数为10的线程池,并且设置了线程池名称前缀、缓冲队列大小等参数。
通过 initialize()
方法初始化线程池,并通过 @Bean
注解将该线程池注册到Spring容器中,其他的组件可以直接使用该线程池进行异步任务的执行。
具体参数说明:
ThreadPoolTaskExecutor
是Spring提供的一个线程池实现,通过配置corePoolSize 、 maxPoolSize 、 queueCapacity
等参数,可以灵活地控制线程池的大小和执行效率。corePoolSize
表示线程池的核心线程数,即在没有任务执行时线程池的大小- 而
maxPoolSize
表示线程池最大的线程数,即当任务数量达到queueCapacity
时,线程池会扩展到该大小。
下面是一个简单的示例,演示了如何使用@Async
注解实现异步调用,使用@Async
注解标记了一个名为doSomething()
的方法,这个方法会在新的线程中异步执行。在调用这个方法时,方法会立即返回,不会阻塞当前线程,从而实现了异步调用。
@Service
@EnableAsync
public class MyService {@Asyncpublic void doSomething() {// 执行一些耗时的操作// ...}
}
相关文章:
Java异步编程
Java异步编程 1、什么是java异步编程2、异步编程有什么作用3、异步编程常用于哪些业务4、异步编程的方式5、Async异步调用Async简介 1、什么是java异步编程 Java异步编程是一种处理并发问题的技术,它可以在执行耗时操作的同时,不阻塞主线程,…...
C++类与对象(二)——构造函数与析构函数
文章目录 一.类的默认6个成员函数二.构造函数1.引例2.构造函数的概念及特性 三.析构函数😋析构函数的特性 前言: 上篇文章初步认识了类以及类的相关知识,本篇将继续深入学习类与对象——类的默认6个成员函数: 一.类的默认6个成员函…...
c++标准模板(STL)(std::array)(四)
定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…...
vue3计算属性
计算属性 模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。推荐使用计算属性来描述依赖响应式状态的复杂逻辑 基础示例 不够好的示例 模板中使用了表达式,不够直观&…...
Java 中的访问修饰符有哪些(九)
Java 中的访问修饰符用于限制类、接口、字段和方法的访问范围,它们分别表示不同的访问控制级别。Java 中共有四种访问修饰符:public、protected、default 和 private。 public public 是最开放的访问修饰符,用于指定公共访问级别。被 publi…...
HR员工管理的三重境界:管事、管人、管心
在一个公司里,员工来来往往是常态,虽说我们不能替他们决定,但是一定是与公司的管理者有一定的关系。马云曾经说过:“一个员工离职,不外乎两种原因,一是钱没给到位;二是心里委屈了”。一句话就是…...
延迟队列与SpringBoot实战
延迟队列与SpringBoot实战 概念 延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列 …...
【算法】九键输入法
题目: 输入数字字符串, 输出这串字符对应的九键输入法有可能出现的所有情况 算法: 定义了一个全局变量 g_numStr,其中存储了每个数字对应的字母。定义了一个递归函数 str_combine,用于将每个数字对应的字母进行组合。str_combin…...
jvm之类加载器
写在前面 当我们通过javac命令将java源代码编译为Java字节码后,必须通过类加载器将其加载到jvm中才能运行,所以类加载器是jvm中非常重要的一个组成部分,本文我们就一起来看下吧! 1:类的生命周期 类的生命周期如下图…...
Chapter4:频率响应法(上)
第四章:频率响应法 Exercise4.1 已知微分网络和积分网络电路图如下图所示,求网络的频率特性。 解: 【图 ( a ) ({\rm a}) (a)微分网络】 由微分网络电路图可得:...
【6. 激光雷达接入ROS】
欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳 2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空&#…...
Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承
文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后:成员变量和方法的访问特点五、继承后:方法重写六、继承后:子类构造器的特点七、继承后:子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…...
[angstromctf 2023] 部分
这个比赛打了个开头就放弃了,最近放弃的比较多,国外的网太慢,国内的题太难。 Crypto ranch 这题直接给出密文这提示 rtkw{cf0bj_czbv_nvcc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831} Caesar dressing is so 44 BC... 然后是加密程序…...
死信队列
死信队列 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息…...
基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)
摘要:本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现,用于智能检测物体种类并记录和保存结果,对各种物体检测结果可视化,提高目标识别的便捷性和准确性。本文详细阐述了目标检测系统的原理,并给出MATLAB的实现代码…...
使用ChatGPT工具阅读文献的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...
实训笔记1
实训笔记 第一天 1.安装tomcat或者其他大数据开发的路径不含中文及空格 2.和同开发 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoApp1oX-1683039421826)(C:\Users\18249\AppData\Roaming\Typora\typora-user-images\image-20230422110823748…...
CCD视觉检测设备如何选择光源
CCD视觉检测设备的机器视觉系统对光源的要求很高,光源是决定图像质量的一个重要因素。那么,我们就来看看CCD图像加网设备和机器视觉系统光源的选择点——CCD图像加网设备。 CCD视觉检测设备机器视觉系统光源选择要点: 1. 对比度:…...
基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic
1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…...
代码随想录补打卡 746 使用最小花费爬楼梯
代码如下 func minCostClimbingStairs(cost []int) int { dp : make([]int,len(cost)1) //思路:设置一个花费数组dp,dp数组的长度等于之前的cost在加上1(1为楼顶元素) dp[0] 0 dp[1] 0 for i : 2 ; i < len(c…...
有理函数的不定积分习题
前置知识:有理函数的不定积分 习题 计算 ∫ x 3 1 x 4 − 3 x 3 3 x 2 − x d x \int \dfrac{x^31}{x^4-3x^33x^2-x}dx ∫x4−3x33x2−xx31dx 解: \qquad 将被积函数的分母因式分解得 x 4 − 3 x 3 3 x 2 − x x ( x − 1 ) 3 x^4-3x^33x^2-xx…...
PS滤镜插件-Nik Collection介绍
PS滤镜插件-Nik Collection介绍 什么是Nik CollectionNik Collection都包含什么? 什么是Nik Collection Nik Collection是一款PS滤镜插件套装,其包含了八款PS插件,功能涵盖修图、调色、降噪、胶片滤镜等方面。Nik Collection 作为很多摄影师…...
力扣刷题2023-05-04-1——题目:2614. 对角线上的质数
题目: 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数,返回 0 。 注意: 如果某个整数大于 1 ,且不存在除 1 和自身之外的正整数因子,…...
【Java笔试强训 2】
🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥排序子…...
术数基础背诵口诀整理
物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己?长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀:东方甲乙青龙木,南方丙丁朱雀火,戊己勾陈腾蛇土&…...
Linux 基础语法 -2
如果我们以后再Linux当中 写了一些命名,导致程序我们不能进行操作了,如这个死循环: 他就会一直输出 "hello Linux" ,我们就使用 ctrl c 来终止因为程序或者指令异常,而导致我们无法进行指令输入ÿ…...
深度学习框架发展趋势
深度学习方法的发展是推动深度学习框架进步的最大动力,因此深度学习框架的功能和设计应顺应 算法和模型的发展趋势: 第一,易用性。深度学习领域仍处于快速发展期,参与者和学习者不断增加,新模型大量提出。因 此&#…...
Mysql为json字段创建索引的两种方式
目录 一、前言二、通过虚拟列添加索引(Secondary Indexes and Generated Columns)三、多值索引(Using multi-valued Indexes)四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的,同 TEXT,BLOB …...
cassandra数据库入门-4
插入数据 在表中创建数据 您可以使用命令 INSERT 将数据插入表中一行的列中。 下面给出了在表中创建数据的语法。 INSERT INTO <tablename> (<column1 name>, <column2 name>....) VALUES (<value1>, <value2>....) USING <option> 例子…...
微服务学习——分布式搜索
初识elasticsearch 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域…...
网站安装教程/怎么优化自己网站的关键词
原贴地址:http://bbs.51js.com/viewthread.php?tid65118 1、一行代码 “偷取所有图片” 试一下下面这行代码能取出所有图片,哈很好玩吧? javascript:adocument.body.getElementsByTagName("img");var b"";for(i0;i<…...
wordpress文章文件/网页制作的基本步骤
医疗样品收集管市场的企业竞争态势 该报告涉及的主要国际市场参与者有ELITech Group、Radiometer Medical、F.L. Medical、Sarstedt、Improve Medical、BD、ALIFAX、Nuova Aptaca、PLASTI LAB、O InterVacTechnology、Biosigma、Vital Diagnostics、ENVASES FARMACEUTICOS、Ten…...
网站怎么做seo_/搜索网站的浏览器
2月8日,据外媒报道,在科技初创企业蓬勃发展的印度,有迹象表明轻松获得资金的市场环境正在发生改变。 在过去一年中的大部分时间里,印度快餐递送初创企业TinyOwl Technology Pvt.每单买卖都出现亏损,为了获得快速扩张&a…...
做网站后有人抢注品牌关键字/seo站长综合查询
应用篇:qt写入版本号应用篇:qt写入版本号创建.rc文件在工程文件中载入.rc文件转载需注明出处应用篇:qt写入版本号 在软件开发及交付的过程中,常常需要对已经发布的软件进行技术维护和bug追踪,而这个恰恰依赖于工程师良…...
用什么软件做购物网站/太原网站关键词排名
在执行Hadoop的创建目录、写数据等情况,可能会出现该异常,而在读文件的时候却不会报错,这主要是由于系统的用户名不同导致的,由于我们进行实际开发的时候都是用Windows操作系统,而编译后的JAVA程序是部署在Linux上的。…...
网站百度权重查询/谷歌广告联盟怎么做
题目 题目链接 题解 太水了啊。 就输入判断就行,不会STL的string就去学一学,不想学的就死一边子去。 当然也可以用strcmp,不过我都快忘了咋用了。 我也懒得写for了,就while输入了。 我的锅,原来是入门题ÿ…...