Java中的异步和同步回调


Java 是一种编程语言和计算平台,最初由 Sun Microsystems 于 1995 年推出。它从小小的起源发展壮大,如今为当今数字世界的大部分提供了动力,它构成了许多服务和应用程序开发的坚实基础。Java 仍在为未来开发的尖端产品和数字服务中使用。

什么是Java中的异步和同步?

Java 的异步编程范式使团队能够分配工作负载并在主应用程序线程之外开发应用程序功能。当团队准备好该功能时,代码随后与主线程同步。

Java 的同步功能允许管理多个线程对任何共享资源的访问。在多线程概念中,多个线程尝试同时访问相同的共享资源,这会导致不可预测的结果。为了确保线程之间可靠的通信,需要同步。

什么是Java中的回调?

CallBack 关键词定义了 JAVA 编程中与许多其他编程语言中的组织中的函数。CallBack 特性是一个传递给另一个函数的函数。CallBack 函数在选定计划上触发特定事件后运行。CallBack 特性的实际原因是向特定类告知另一个类的运行状态。当我们处理某些异步任务时,CallBack 函数非常有用。“事件处理程序”的使用也是如此,因为它在用户单击前端上的按钮时提供某种形式的通知。因此,我们可以认为 CallBack 函数在执行常规编程任务(例如执行各种操作和从网络下载一些数据)时发挥着至关重要的作用。至于在 JAVA 编程语言中使用 CallBack 属性,可以通过使用接口来实现。让我们回顾一下在 JAVA 编程中执行 CallBack 函数的常用方法。

回调功能的实现方法?

  • 我们首先定义我们需要在回调后调用的接口方法。

  • 要实现接口回调方法,请定义一个类。

  • 要注册回调接口,请设置对任意类的引用。

  • 使用已定义的引用来调用 CallBack 方法。

Java 中的回调类型?

  • 同步调用

  • 异步调用

同步调用语法

  • 步骤 1 - 创建一个接口。

  • 步骤 2 - 创建 void 方法。

  • 步骤 3 - 创建类。

  • 步骤 4 - 创建 public void 方法。

示例

// This is a program in Java for understanding
// the implementation of "Asynchronous call".

interface ExampleEventListener {
   // Any type of method
   // can be defined below
   void exampleEvent();
}

// Define a random class
// in which the main section is also
// defined
public class Example2 {
   private ExampleEventListener mListener; // This is the listener field

   // Set up the Listener below using the public
   // access modifier and the void return type
   public void registerExampleEventListener(ExampleEventListener mListener) {
      this.mListener = mListener;
   }

   // This is my synchronous task
   // which needs to be performed.
   public void myStuff() {

      // An async task always executes within a new thread
      // so a new thread must be created in order to execute.

      System.out.print("The task being performed ");
      System.out.println("here is a synchronous task");

      // Check whether the listener is registered or not.
      if (this.mListener != null) {
         // Invoke the callback method of the ExampleEventListener class
         mListener.exampleEvent();
      }
   }

   public static void main(String[] args) {
      Example2 obj = new Example2();
      ExampleEventListener mListener = new Myclass();
      obj.registerExampleEventListener(mListener);
      obj.myStuff();
   }
}

class Myclass implements ExampleEventListener {
   @Override
   public void exampleEvent() {
      System.out.print("Performing callback after ");
      System.out.print("the completion of the synchronous task");
      // Perform any random routine operation
   }
   // Some Myclass methods
}

输出

The task being performed here is a synchronous task
Performing callback after the completion of the synchronous task

从重要的输出中,我们可以理解在 JAVA 编程语言中使用 CallBack 方法的同步调用的作用。我们可以观察到上面讨论的每个步骤都与上面的程序相关联。在上文中,我们在程序中使用了事件侦听器接口。

何时使用同步调用?

当程序中的多个任务需要按特定顺序依次执行时,我们使用同步调用。耗时较短的任务也被认为是同步调用的。

异步调用语法

  • 步骤 1 - 创建一个接口。

  • 步骤 2 - 创建一个 void 类。

  • 步骤 3 - 创建一个 public void 类。

  • 步骤 4 - 创建 public void 方法。

示例

interface ExampleCallEventListener {
   void exampleCallEvent();
}

public class Example1 {

   private ExampleCallEventListener mListener;

   public void registerExampleCallEventListener(ExampleCallEventListener mListener) {
      this.mListener = mListener;
   }

   public void myStuff() {
      new Thread(new Runnable() {
         public void run() {
            System.out.println("This is an example and tutorial here");

            if (mListener != null) {
               mListener.exampleCallEvent();
            }
         }
      }).start();
   }

   public static void main(String[] args) {
      Example1 obj = new Example1();
      ExampleCallEventListener mListener = new MyClass();
      obj.registerExampleCallEventListener(mListener);
      obj.myStuff();
   }
}

class MyClass implements ExampleCallEventListener {
   
   @Override
   public void exampleCallEvent() {
      System.out.println("Performing callback after the completion of an Async Task");
   }
}

输出

This is an example and tutorial here
Performing callback after the completion of an Async Task

从上面提到的程序中,我们可以了解到在 JAVA 编程语言中使用 CallBack 方法的异步调用的作用。我们可以观察到创建了一个新线程,并且回调是在该线程内调用的。我们在程序中使用了事件侦听器接口。

何时使用异步调用?

当程序任务彼此不依赖时,我们使用异步调用,因此一个任务的中断不会影响其他任务。耗时较长的任务也被认为是异步调用的。

Java 中同步调用和异步调用的区别

定义

同步调用是一种回调,其中执行代码在继续之前等待事件。另一方面,异步调用是指不阻塞事务的回调。这是 Java 中同步调用和异步调用的主要区别。

功能

Java 既有同步调用也有异步调用,它们在等待事件时处理代码执行的方式不同。与同步调用或回调不同,异步调用允许程序在此等待期间继续执行代码。

应用

程序员可以根据他们对任务完成的需求访问两种不同的回调方法——同步或异步,这取决于哪种方法最适合他们。同步回调在执行需要最少处理时间的例行任务时非常方便,而异步回调则更适合执行时间较长的更复杂和不相关的进程。类似地,Java 基于编码实践中的同步与异步调用也存在差异,没有例外。

结论

实现 Java 编程允许使用同步和异步调用。与异步调用执行不同,异步调用执行允许程序无中断地执行其他代码段,同步调用需要事件发生后系统或程序才能采取进一步的操作。

更新于:2023年8月1日

3K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告