详解java 三种调用机制(同步、回调、异步)

详解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 三种调用机制(同步、回调、异步) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Linux系统下安装三个或者多个tomcat(步骤详细)

    以下是详细讲解“Linux系统下安装三个或者多个tomcat”的完整攻略,包含步骤、示例和注意事项。 步骤一:下载相关软件 首先,在Linux系统中,需要下载安装JDK和tomcat,其中JDK是tomcat的运行环境,JDK和tomcat的版本需要兼容,推荐使用JDK8和tomcat8。你可以到Oracle官网下载JDK和到Apache官网下载tomcat…

    Java 2023年5月19日
    00
  • turn.js异步加载实现翻书效果

    下面是使用turn.js异步加载实现翻书效果的完整攻略: 1. 引入turn.js 首先,需要在HTML文件中引入turn.js文件和其依赖的jQuery库。可以在turn.js官网下载代码。 <!– 引入jQuery库 –> <script src="https://ajax.googleapis.com/ajax/libs…

    Java 2023年6月15日
    00
  • PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法

    下面是关于PHP模拟登陆163邮箱并进行发邮件、获取通讯录列表的详细攻略。 步骤一:模拟登陆163邮箱 首先,我们需要进行模拟登陆163邮箱。为了实现这个目标,我们可以采用CURL库来构建HTTP请求,并通过DOMDocument和SimpleXMLElement处理HTML和XML文档。下面是模拟登陆的详细步骤: 1. 准备登陆数据 我们需要准备一个数组来…

    Java 2023年6月16日
    00
  • 浅谈Java对象禁止使用基本类型

    浅谈Java对象禁止使用基本类型 什么是基本类型 基本类型是Java中的8种基本数据类型,包括boolean、byte、short、int、long、float、double和char。这些类型并不是对象,是Java中的原始类型。 为什么Java对象禁止使用基本类型 虽然基本类型在Java中的使用非常方便和高效,但是基本类型缺乏封装性,难以进行面向对象的编程…

    Java 2023年5月26日
    00
  • jdk8的datetime时间函数使用示例

    下面我来详细讲解一下“jdk8的datetime时间函数使用示例”的完整攻略。 JDK8的DateTime时间函数使用示例 1. DateTime创建对象 在JDK8之前,Java的日期和时间的API非常难用和陈旧,但在JDK8中,Java提供了一个全新的日期和时间API(java.time),它提供了一种更简单、更易于使用和更安全的方式来处理日期和时间。 …

    Java 2023年5月20日
    00
  • Java在重载中使用Object的问题

    当Java中出现方法重载时,如果方法的参数类型为Object类型,则会出现重载冲突的情况。这是因为Java中所有类都继承了Object类,因此方法重载可能会引起歧义。 为了避免这种情况,可以采用以下方法: 明确指定参数类型 在定义方法时,尽量明确指定参数类型,避免使用Object类型。例如: public class Test { public void m…

    Java 2023年5月26日
    00
  • java编译时与运行时概念与实例详解

    Java编译时与运行时概念与实例详解 在Java程序员的日常工作中,熟练掌握Java编译时和运行时的概念非常重要。本文将详细介绍Java编译时和运行时的相关知识以及一些实例。 Java编译时 概念 Java编译时是指将Java源代码编译为class文件的过程。在Java程序开发中,一般先编写Java源代码,然后通过JDK中的javac命令将Java源代码编译…

    Java 2023年5月20日
    00
  • Spring Boot整合Lombok的方法详解

    下面我将为您详细讲解“Spring Boot整合Lombok的方法详解”的完整攻略。 1. 什么是Lombok Lombok 是一个 Java 库,通过注解的形式,可以在编译期自动生成一些简单重复的代码,如 getter/setter/toString 等,减少代码的冗余,提高开发效率。 2. 引入Lombok依赖 在 pom.xml 文件中添加以下依赖: …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部