Spring异步方法注解 @Async

推荐算法之Thompson(汤普森)采样 如果想理解汤普森采样算法,就必须先熟悉了解贝塔分布。 一、Beta(贝塔)分布 Beta分布是一个定义在[0,1]区间上的连续概率分布族,它有两个正值参数,称为形状参数,一般用α和β表示,Beta分布的概率密度函数形式如下: 这里的Γ表示gamma函数。 Beta分布的均值是: 方差: ... 阅读详情

@Async

0. 介绍

在Spring 3.x之后,通过内置@Async标明异步方法,可以简化异步开发流程。

@Async既可提供无返回值的调用,也可提供有返回值的调用,下文将分别介绍两种使用方式。

1. 代码Demo

1.1 线程池配置

Spring线程池配置有两种基本配置方式,此处实用其中一种

<task:executor id="myexecutor" pool-size="5"  />  
<task:annotation-driven executor="myexecutor"/> 

1.2 无返回值的调用方式

  • 测试类
@Component
public class AsyncTask {

    @Async
    public void exec() throws Exception{
        System.out.println("准备睡觉:" + System.currentTimeMillis());
        Thread.sleep(10);
        System.out.println("醒了");
    }
}

-测试代码

public class AsyncTaskTest extends AbstractTest {

    @Autowired
    private AsyncTask asyncTask;

    @Test
    public void testExec() throws Exception {
        for (int i= 0; i<5;i++)
            asyncTask.exec();

        Thread.sleep(1000L);
    }
}
  • 测试结果
准备睡觉:1511882628039
准备睡觉:1511882628039
准备睡觉:1511882628039
准备睡觉:1511882628039
准备睡觉:1511882628039
醒了
醒了
醒了
醒了
醒了
  • 结果分析

从代码输出来看,五个任务在同一时间被执行,说明@Async注解能够达到异步执行方法的目的。

1.3 有返回值的调用

@Async标记的方法,可返回AsyncResult结果,该类为Future子类,因此该类可通过future.get()和future.get(long timeout, TimeUnit unit)拿到返回结果;

  • 测试类
@Component
public class AsyncTask {

    @Async
    public Future<String> exec() throws Exception{
        System.out.println("准备睡觉" + System.currentTimeMillis());
        Thread.sleep(10);
        System.out.println("醒了");
        return new AsyncResult<String>("有力气了");
    }
}
  • 测试代码
public class AsyncTaskTest extends AbstractTest {

    @Autowired
    private AsyncTask asyncTask;

    @Test
    public void testExec() throws Exception {
        String asyncResult1 = asyncTask.exec().get();
        String asyncResult2 = asyncTask.exec().get();
        String asyncResult3 = asyncTask.exec().get();
        String asyncResult4 = asyncTask.exec().get(50, TimeUnit.MILLISECONDS);
        String asyncResult5 = asyncTask.exec().get(50, TimeUnit.MILLISECONDS);

        System.out.println("result1:" + asyncResult1);
        System.out.println("result2:" + asyncResult2);
        System.out.println("result3:" + asyncResult3);
        System.out.println("result4:" + asyncResult4);
        System.out.println("result5:" + asyncResult5);
    }
}

  • 测试结果
准备睡觉1511883563474
醒了
准备睡觉1511883563487
醒了
准备睡觉1511883563498
醒了
准备睡觉1511883563510
醒了
准备睡觉1511883563521
醒了
result1:有力气了
result2:有力气了
result3:有力气了
result4:有力气了
result5:有力气了
  • 结果分析

通过设置超时时,可在约定时间内获取结果,避免程序hang住,该方法较为实用。

Neo4j桌面版导入CVS文件 我们的relation.csv是这样的。 阅读详情

相关推荐

完整的 Python 数据分析案例:新能源汽车续航里程预测

随着新能源汽车的普及,续航里程成为消费者关注的重要指标。准确预测新能源汽车的续航里程,有助于车企优化电池管理系统、提升车辆性能,也能帮助消费者合理规划出行。本案例将基于新能源汽车的各项参数,如电池容量、行驶速度、环境温度等,构建续航里程预测模型。通过以上改进,可以提高数据处理的准确性、模型的性能和可视化的效果。

daqsdfas的博客 1538

Spring@Async注解实现异步

简单介绍 Spring为任务调度与异步方法执行提供了注解支持。通过在方法上设置@Async注解,可使得方法异步调用。也就是说调用者会在调用时立即返回,而被调用方法的实际执行是交给Spring的TaskExecutor来完成。 @Async注解开启 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;task:annotation-driven executor=&amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;an

zeng_ll的博客 2171

LVGL(lv_canvas)

这篇文章介绍了LVGL图形库中的lv_canvas组件,主要内容包括: lv_canvas是一个绘图缓冲区对象,提供丰富的绘图API,可以理解为LVGL的"离屏画布"。 基本使用流程:创建缓冲区->创建canvas对象->设置缓存和尺寸->进行绘图操作。 详细列举了常用的绘图函数,如绘制线条、矩形、文字、图片等。 提供了示例代码展示如何创建画布并绘制一条红色线段。 介绍了canvas的典型应用场景,如动态波形绘制、自定义控件底图等。 对比了canvas与普通img的区别

m0_49476241的博客 984

Spring 3.x(特别是 3.2+)中处理@Async异常的正确解决方案

Spring 3.1 中引入了接口,我们可以通过实现它来自定义异常处理,但这需要更多的手动配置。// 设置自定义的异常处理执行器 return new ExceptionHandlingAsyncTaskExecutor(executor);

lanwp5302的博客 503

Spring@Async

一、简述 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务。其实,在 Spring3.x 之后,就已经内置了 @Async 来完美解决这个问题。 二、何为异步调用 在解释异步调用之前,先来看同步调用的定义:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕,而是继续执行下面的流程。 例如,在某个调用中,

ChineseSoftware的博客 286

Spring异步任务@Async详解分析

在业务场景中,有时需要使用自己定义的执行器来跑异步的业务逻辑,那该怎么办呢?答案是,自定义线程池。在方法上的@Async@Async("MyExecutor") //使用自定义的线程池(执行器) public void asyncCpsItemImportTask(Long platformId , String jsonList) {//...具体业务逻辑 } }

上善若泪 1万+

Quartz和Spring Task定时任务简单配置

一、Quartz 需要引入quartz的jar包,以下代码是例子: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...

Last_out的专栏 362

Spring框架提供的@Async注解异步方法使用注意事项

合理使用@Async能显著提升应用性能,但需注意代理机制、线程池配置和异常处理等细节。建议结合自定义线程池和完善的监控机制,确保异步任务的稳定性。

qq_36633637的博客 1003

Spring @Async注解实现异步方法

一、使用方式 二、自定义线程池 三、自定义线程池的使用 四、线程池execute(Runable)方法执行过程

晓呆同学的专栏 1028

Java Spring注解@Async异步方法简介及使用

Java Spring注解@Async异步方法简介及使用 发现一篇介绍得很详细的博文: java Spring@Async 这篇包含@Async的源代码 Java Spring注解系列 :一 @Async的介绍和使用 后续看到好文再补充进来~

qq_39691492的博客 1578

使用Spring@Async注解实现方法异步执行

Spring为任务调度与异步方法执行提供了注解支持。通过在方法上设置@Async注解,可使得方法异步调用。也就是说调用者会在调用时立即返回,而被调用方法的实际执行是交给Spring的TaskExecutor来完成。 Spring异步配置 &amp;lt;!-- 异步配置 --&amp;gt; &amp;lt;task:annotation-driven executor=&quot;myExecutor&quot;/&amp;gt; &a

施勇 876

Spring异步方法注解@Async

本文仅用于学习交流: 转载自:http://www.mekau.com/3991.html 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法注解是不会生效的。  在调用@Async方法的类后面添加注解: @EnableAsync  在被调用的方法增加@Async注解  调用和被调用, 不能在一个类里面定义, 要分开定义.

resemble的博客 9192

Spring框架是如何查找方法上的异步任务注解@Async

Spring框架层面,查找方法上的注解的原理与机制是一样的。 在方法层面,Spring框架已经找到子类的@Async注解,原因是查找注解会搜索整棵类型继承树,包括超类和实现的接口。

简放视野的专栏 735

@Async(“asyncExecutor“) Spring 框架中用于实现异步方法调用的注解

@Async("asyncExecutor") 是 Spring 框架中用于实现异步方法调用的注解

qq_44349518的博客 465

深入理解Spring@Async注解:实现异步方法调用

在当今高速发展的应用开发领域,对于提升系统性能和响应能力的需求越来越迫切。而异步编程作为一种解决方案,已经成为现代应用开发中的一项重要技术。本篇博客将带您深入探究 Java 中的 @Async 注解,揭示其强大的异步执行能力和精妙的实现机制。异步编程是一种编程模式,通过将任务分解为多个子任务,并在后台或并行线程中执行这些子任务,以提高程序的性能和响应能力。@Async 注解Spring 框架提供的注解,用于将方法标记为异步执行的方法

weixin_46993901的博客 4806

spring异步注解@Async

spring通过@Async异步注解,采用AOP编程思想,让这部分逻辑实现的更简洁、规范、完善,也让系统更容易维护,并对多线程池、异常等问题做了深入分析

sjzwangxufeng的专栏 2446

Spring@Async用法总结

引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。

木小鱼的笔记 16万+

Spring@Async异步注解

1.注解介绍 @Async注解,该注解可以被标注在方法上,以便异步地调用该方法。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。在项目应用中,@Async调用线程池,推荐使用自定义线程池的模式。自定义线程池常用方案:重新实现接口AsyncConfigurer。 2.Spring线程池 1. SimpleAsyncTaskExecutor:,这个类不重用线程,默认每次调用都会创建一个新的线程。 2. SyncTaskExecu

sun134911的博客 1万+

Spring异步注解@Async

通过AsyncExecutionAspectSupport源码,我们可以知道线程池会首先通过用户自己配置的为准,找不到就使用默认的线程池Spring会优先搜索TaskExecutor类型的bean或者名为taskExecutor的Executor类型的bean,如果都不存在的话,会使用SimpleAsyncTaskExecutor(不推荐使用)执行器。所以,我们可以自定义线程池,然后注入spring中,将bean的名字放到@Async注解的value值即可。

Ascend1977的博客 1058

Spring异步详解(@Async

Spring异步任务@Async详解分析

陌上花开的博客 2015

UE中文破解版

UE中文版,含破解,功能齐全,安装后即可以用

中国极端气温指数栅格数据集(1961-2020)-最新出炉.zip

中国极端气温指数栅格数据集(1961-2020)-最新出炉.zip

上一篇: Spring定时任务
下一篇: Guava EventBus体验
亘易
博客等级 码龄15年 6粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值