JAVA的异步调用

本文探讨了在Java中实现后台异步调用的三种方法:1) 使用Callable接口结合线程池;2) 利用回调机制;3) 使用Spring框架的@Async注解。通过示例代码和解释,阐述了每种方式的工作原理,并指出虽然Spring框架的异步支持方便,但理解其底层机制很重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:在实际的业务中总有这样的场景,后台执行的时间过长,前端需要立即返回结果,以取得良好的客户体验。那么后台的异步调用改怎么实现呢?

1、 使用callable接口,加线程池
2、 使用JAVA的回调机制
3、 使用spring框架默认的异步调用方式

一、第一种方式是比较简单,也比较常用的方式,下面看一段示例代码:

public void sync(){

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            //无返回值的业务代码
        }
    });
    ExecutorService executorService = Executors.newFixedThreadPool(5);
    Future<Object> submit = executorService.submit(new Callable<Object>() {
        @Override
        public Object call() throws Exception {
            //有返回值的业务代码
            return "";
        }
    });

    boolean done = submit.isDone();
    //针对执行情况进行响应,也可以单独写一个轮询方法,进行业务的轮询
}

二、回调机制
这种方式的回调就是
类A的a()方法,调用类B的b()方法
类B的b()方法,执行完毕主动调用类A的callback()的方法。

举个例子:

回调接口:

/**
 * Created by xiekeyi on 2017/12/5.
 */
public interface MyCallback {


    void callback();
        //回调方法
}

执行者:

public class Trigger implements MyCallback {
    private MyJob job;

    Trigger(MyJob job){
        this.job=job;
    }

    @Override
    public void callback() {

    }

    void exe(){
        job.execute(this);
    }
}

业务部分:

public class MyJob{

    void execute(MyCallback callback){
        //执行完业务方法之后,执行回调
        callback.callback();
    }

}

核心原理就是,把业务对象传入执行者。实现回调,当然可以进一步抽象业务类。

调用的时候,使用线程,进行异步处理。

三、第三种方式使用,spring 框架特有的注解作用于方法上,实现异步调用。

@async注解


@Async
public void sync(){

总结:无论多么优雅的实现方式,都不如框架来的方便,spring框架提供了很多遍历,在使用框架的过程中,多去了解框架的实现原理,比只学习如何使用有用的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值