Java常见的调用机制:同步调用,异步调用,回调

Java常见的调用机制:同步调用,异步调用,回调

在Java的开发过程里,程序模块的交互是有许多种方式的,其中较为常见的就是同步调用+异步调用+回调,java开发之中最基础也是最常用的就是以上三种调用机制。在java的学习之中,了解这三种调用机制是不得不做的,调用机制也能帮助你更好的编写程序,提高其性能以及可维护性。

1. 同步调用(Synchronous Call)

同步调用是最为直接的方式,调用方在发起请求之后会阻塞等待被调用端执行完成,并在完成之后返回执行的数据。

// 同步调用示例
public class SyncExample {
    public static void main(String[] args) {
        System.out.println("开始同步调用");
        String result = fetchDataSync();
        System.out.println("收到结果: " + result);
        System.out.println("同步调用结束");
    }

    public static String fetchDataSync() {
        try {
            Thread.sleep(2000); // 模拟耗时操作
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return "同步数据";
    }
}

2. 异步调用(Asynchronous Call)

异步调用和同步调用最大的不同就是不会阻塞主线程,它会借助线程池、Future 或 CompletableFuture 实现。

// 异步调用示例(使用 CompletableFuture)
import java.util.concurrent.CompletableFuture;

public class AsyncExample {
    public static void main(String[] args) {
        System.out.println("开始异步调用");
        CompletableFuture.supplyAsync(() -> fetchDataAsync())
            .thenAccept(result -> System.out.println("收到结果: " + result));
        System.out.println("异步调用已发起,主线程继续执行");

        // 等待异步任务完成(仅用于演示)
        try { Thread.sleep(3000); } catch (InterruptedException e) {}
    }

    public static String fetchDataAsync() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return "异步数据";
    }
}

3. 回调(Callback)

回调则是一种类似于“反向调用”机制:其就是调用方会将一个方法或者是函数作为参数传递给被调用方,被调用方则会在适当的时机执行这个方法。

// 回调示例
interface Callback {
    void onComplete(String result);
}

public class CallbackExample {
    public static void main(String[] args) {
        System.out.println("开始回调调用");
        fetchDataWithCallback(new Callback() {
            @Override
            public void onComplete(String result) {
                System.out.println("收到回调结果: " + result);
            }
        });
        System.out.println("回调调用已发起");
        
        try { Thread.sleep(3000); } catch (InterruptedException e) {}
    }

    public static void fetchDataWithCallback(Callback callback) {
        new Thread(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
            callback.onComplete("回调数据");
        }).start();
    }
}

总结

在java的开发过程中,同步调用是最简单但是可能造成阻塞;异步调用能够提升响应性但是需要处理并发的问题;回调机制相对灵活但是也容易出现程序员口中的“回调地狱”。

所以在实际的项目中,我们需要根据业务场景来进行选择或者组合这些调用机制。

Annie整理的云服务器优惠列表

云服务商 它的优点 客官来看
阿里云 轻量云服务器38元/年(需抢)、68元/年(限购一台)、ECS云服务器99元/年(续费同价) 点击进入
腾讯云 2核2G4M 服务器新客99元/年 353元/3年 进来逛逛
UCloud 2核2G3M 轻量云主机83元/年 华盛顿/洛杉矶/圣保罗/法兰克福/伦敦90元/年 快来看看
雨云 签到1个月送一周,签到2个月0.5个月,以此类推,新人五折首购优惠 超时空跃迁
HostVDS 1核1G 云服务器0.99美元/月 实时计费 随意换ip 随时可以注销云服务器 进入,内地打开慢
LightNode 全球有45+节点,许多冷门地区,实时计费,随意换ip,随时取消 点击进入

注:以上为佣金推广链接,我们可能从中获得收益,但不会影响您的购买价格。