详解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对象获取结果。在获取结果之前,主线程可以继续执行其他操作。

结语

通过上面的介绍,我们知道了同步、异步和回调的区别和特点。不同的场景可以使用不同的调用机制来进行程序优化,从而提高代码的性能和可读性。

阅读剩余 49%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解java 三种调用机制(同步、回调、异步) - Python技术站

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

相关文章

  • 解析Oracle数据库中的对象集合schema

    我来详细讲解一下解析Oracle数据库中的对象集合schema的完整攻略。 1. 确定schema名称 首先需要确认要解析的Oracle数据库对象集合schema的名称,可以使用以下SQL语句查询: SELECT username FROM dba_users; 2. 使用Oracle的数据字典 Oracle提供了数据字典来存储关于数据库对象的元数据信息,数…

    Java 2023年5月20日
    00
  • Java常用命令汇总

    Java常用命令汇总攻略 Java是一种高级编程语言,由于其稳定性和跨平台性能备受欢迎,因此成为了许多软件的首选语言。针对Java的常用命令,本文旨在为初学者提供帮助以及提高Java编程效率。下面将对Java常用命令进行详细讲解。 Java编译命令 Java编写的代码在开发完成后需要编译成可执行的文件。下面是Java编译命令的格式和用法: javac [op…

    Java 2023年5月19日
    00
  • Spring 零基础入门WebFlux框架体系

    Spring 零基础入门WebFlux框架体系攻略 什么是WebFlux Spring WebFlux是Spring框架的一个子项目,它提供了一种处理响应式HTTP请求的方式,支持反应式流和异步编程模型。使用WebFlux,我们可以编写非阻塞的、响应式的应用程序,可以处理大量的并发请求而不会像传统的Servlet容器一样阻塞线程。 如何使用WebFlux 首…

    Java 2023年5月19日
    00
  • java中实现创建目录与创建文件的操作实例

    以下是Java中创建目录和文件的操作实例: 创建目录 在Java中,可以使用File类的mkdir()方法来创建目录。这个方法用于创建一个目录,但它只会创建最后一级目录,如果上级目录不存在,则会创建失败。 示例1:创建单层目录 import java.io.File; public class CreateDirectory { public static …

    Java 2023年5月20日
    00
  • SpringBoot热部署配置方法详解

    在开发Spring Boot应用程序时,经常需要修改代码并重新编译,这会导致应用程序需要重新启动。为了避免这种情况,我们可以使用热部署来实现在不重启应用程序的情况下更新代码。在本攻略中,我们将详细介绍如何配置Spring Boot热部署,并提供两个示例来说明其用法。 以下是两个示例,介绍如何配置Spring Boot热部署: 示例一:使用Spring Boo…

    Java 2023年5月15日
    00
  • Java GUI实现学生成绩管理系统

    作为Java GUI实现学生成绩管理系统的作者,以下是详细的攻略: 1. 学习Java GUI 首先需要熟悉Java GUI相关的知识,包括Swing和AWT等基础知识。可以通过在线课程、教程和书籍等途径来学习。 2. 设计学生成绩管理系统 在学习了Java GUI基础知识之后,开始设计学生成绩管理系统。首先需要确定系统的功能和界面设计,包括成绩录入、成绩查…

    Java 2023年5月24日
    00
  • 浅谈使用java解析和生成JSON

    下面就为你详细讲解: 前言 在现代的互联网应用中,JSON已经成为了一种广泛使用的数据格式,常被用于数据的传输和存储。Java作为一门在企业中广泛使用的编程语言,也自然而然的提供了解析和生成JSON的相关库。本文将介绍如何使用Java解析和生成JSON数据。 解析JSON数据 在Java中,解析JSON数据最常用的方法就是使用Gson库。Gson是一个Goo…

    Java 2023年5月26日
    00
  • spring data JPA 中的多属性排序方式

    标题:spring data JPA 中的多属性排序方式 简介 Spring Data JPA是Spring框架中访问JPA数据的一个模块。它提供一种方便的方式来持久化数据,同时也提供了许多有用的特性,其中之一就是排序。常见的排序方式包括按照单个属性排序,但在某些情况下我们需要按照多个属性来排序。在本篇文章中,我将介绍如何使用Spring Data JPA中…

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