调用机制指的是在进行函数调用时,系统进行操作的方式。针对不同的操作方式,可以分为同步、回调、异步这三种机制。
详解java 三种调用机制(同步、回调、异步)
调用机制的概念
调用机制指的是在进行函数调用时,系统进行操作的方式。针对不同的操作方式,可以分为同步、回调、异步这三种机制。
同步调用机制
同步调用机制指的是在函数调用时,必须等待该函数返回结果之后才能继续执行下一步操作的调用方式。在同步调用过程中,如果该函数阻塞或运行时间较长,那么整个程序的性能就会变得比较低下。因此,在同步调用中,一般都是对计算量小的函数进行操作。
下面是一个Java同步调用的示例:
public class SyncDemo {
public static void main(String[] args) {
int result = synchronousSum(1, 2);
System.out.println(result);
}
public static int synchronousSum(int a, int b) {
return a + b;
}
}
在上述示例中,synchronousSum函数的返回结果必须等待该函数执行完成之后才能进行打印输出的操作。
回调调用机制
回调调用机制指的是在进行函数调用时,调用方不会等待函数返回结果,而是继续进行自己的操作。当被调用函数执行完成时,系统会通知调用方,并通过一个回调函数将结果返回给调用方。在回调调用中,可以使用函数指针或接口回调的方式实现。
下面是Java回调机制的示例:
interface Callback {
void onExecuted(int result);
}
public class CallbackDemo {
public static void main(String[] args) {
asynchronousSum(1, 2, new Callback() {
@Override
public void onExecuted(int result) {
System.out.println(result);
}
});
}
public static void asynchronousSum(int a, int b, Callback callback) {
new Thread(() -> {
int result = a + b;
callback.onExecuted(result);
}).start();
}
}
在上述示例中,asynchronousSum被调用时,不会等待该函数执行完成。而是将回调函数Callback传递给该函数并启动一个新线程执行a+b的计算操作,当计算完成后,通过回调函数返回结果。
异步调用机制
异步调用机制指的是在进行函数调用时,调用方不会等待函数返回结果,而是继续进行自己的操作。当被调函数执行完成时,系统会通知调用方并返回结果。
下面是Java异步调用的示例:
import java.util.concurrent.*;
public class AsyncDemo {
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Integer> future = executorService.submit(() -> {
Thread.sleep(1000);
return 1 + 2;
});
System.out.println("Main thread do other things...");
Integer result = future.get();
System.out.println("Result is " + result);
executorService.shutdown();
}
}
在上述示例中,通过ExecutorService的submit方法异步执行计算任务,并通过Future对象获取结果。在获取结果之前,主线程可以继续执行其他操作。
结语
通过上面的介绍,我们知道了同步、异步和回调的区别和特点。不同的场景可以使用不同的调用机制来进行程序优化,从而提高代码的性能和可读性。
本文标题为:详解java 三种调用机制(同步、回调、异步)
基础教程推荐
- SpringBoot整合Docker实现一次构建到处运行的操作方法 2023-06-17
- 你可能真没用过这些 IDEA 插件(建议收藏) 2024-03-01
- java发送kafka事务消息的实现方法 2023-03-06
- java类的组成结构详解 2023-08-10
- 浅谈Java循环中的For和For-each哪个更快 2023-04-17
- SpringBoot静态资源与首页配置实现原理深入分析 2023-06-10
- WebClient抛UnsupportedMediaTypeException异常解决 2022-10-30
- Java Eureka探究细枝末节 2023-05-08
- spring mvc rest 接口选择性加密解密详情 2023-03-21
- Java 8 动态类型语言Lambda表达式实现原理解析 2024-03-02