实战Spring Boot 2.0系列(三) - 使用@Async进行异步调用详解

本文详细介绍了如何在Spring Boot 2.0中使用@Async注解实现异步调用,包括同步调用的概念对比,异步调用的实现,异步回调的处理,线程池的定义,以及如何优雅地关闭线程池。通过实例展示了异步处理提高执行效率的方法。
摘要由CSDN通过智能技术生成

前言

异步调用 对应的是 同步调用同步调用 指程序按照 定义顺序 依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用 指程序在顺序执行时,不等待 异步调用的语句 返回结果 就执行后面的程序。

正文

1. 环境准备

利用 Spring Initializer 创建一个 gradle 项目 spring-boot-async-task,创建时添加相关依赖。得到的初始 build.gradle 如下:

buildscript {
    ext {
        springBootVersion = '2.0.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'io.ostenant.springboot.sample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compileOnly('org.projectlombok:lombok')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Spring Boot 入口类上配置 @EnableAsync 注解开启异步处理。

@SpringBootApplication
@EnableAsync
public class Application {
   
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

创建任务抽象类 AbstractTask,并分别配置三个任务方法 doTaskOne()doTaskTwo()doTaskThree()

public abstract class AbstractTask {
   
    private static Random random = new Random();

    public void doTaskOne() throws Exception {
        out.println("开始做任务一");
        long start = currentTimeMillis();
        sleep(random.nextInt(10000));
        long end = currentTimeMillis();
        out.println("完成任务一,耗时:" + (end - start) + "毫秒");
    }

    public void doTaskTwo() throws Exception {
        out.println("开始做任务二");
        long start = currentTimeMillis();
        sleep(random.nextInt(10000));
        long end = currentTimeMillis();
        out.println("完成任务二,耗时:" + (end - start) + "毫秒");
    }

    public void doTaskThree() throws Exception {
        out.println("开始做任务三");
        long start = currentTimeMill
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值