Java项目中如何实现异步回调

  介绍

这篇文章将为大家详细讲解有关Java项目中如何实现异步回调,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强> Java异步回调机制

<强>一、什么是回调

回调,回调。要先有调用,才有调用者和被调用者之间的回调,所以在百度百科中是这样的:

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用,回调和异步调用。

回调是一种特殊的调用,至于三种方式也有点不同。

1,同步回调,即阻塞,单向。

2,回调,即双向(类似自行车的两个齿轮)。

3,异步调用,即通过异步消息进行通知。

<强>二、CS中的异步回调(Java案例)

比如这里模拟个场景:客户端发送味精给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码如下:

回调接口类:

/* *   * @author杰夫?李   * @since 2015-10-21 21:34:21   *回调模式,回调接口类   */公共接口CSCallBack {   公共空间过程(字符串状态);   }

模拟客户端:

/* *   * @author杰夫?李   * @since 2015-10-21 21:25:14   *回调模式,模拟客户端类   */公共类客户端实现CSCallBack {      私人服务器服务器;      公共客户端(服务器服务器){   这一点。服务器=服务器;   }      公共空间sendMsg(最终字符串味精){   System.out.println(“客户端:发送的消息为:“+味精);   新线程(新Runnable () {   @Override   公共空间run () {   server.getClientMsg (Client.this、味精);   }   }) .start ();   System.out.println(“客户端:异步发送成功“);   }      @Override   公共空间过程(字符串状态){   System.out.println(“客户端:服务端回调状态为:“+状态);   }   }

模拟服务端:

/* *   * @author杰夫?李   * @since 2015-10-21 21:24:15   *回调模式,模拟服务端类   */公共类服务器{      公共空间getClientMsg (CSCallBack CSCallBack,字符串味精){   System.out.println(“服务端:服务端接收到客户端发送的消息为:“+味精);//模拟服务端需要对数据处理   尝试{   线程。睡眠(5 * 1000);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   System.out.println(“服务端:数据处理成功,返回成功状态200“);   字符串状态=?00“;   csCallBack.process(状态);   }   }

测试类:

/* *   * @author杰夫?李   * @since 2015-10-21 21:24:15   *回调模式——测试类   */公开课CallBackTest {   公共静态void main (String [] args) {   服务器服务器=新的服务器();   客户端=新的客户端(服务器);      client.sendMsg(“服务器,你好~“);   }   }

运行下测试类——打印结果如下:

客户端:发送的消息为:服务器,你好~
客户端:异步发送成功
服务端:服务端接收到客户端发送的消息为:服务器,你好~
(这里模拟服务端对数据处理时间,等待5秒)
服务端:数据处理成功,返回成功状态200
客户端:服务端回调状态为:200

一步一步分析下代码,核心总结如下

1,接口作为方法参数,其实际传入引用指向的是实现类
2,客户的sendMsg方法中,参数为决赛,因为要被内部类一个新的线程可以使用。这里就体现了异步。
3,调用服务器的getClientMsg(),参数传入了客户本身(对应第一点)。

<强>三,回调的应用场景

回调目前运用在什么场景比较多呢?从操作系统到开发者调用:

1, Windows平台的消息机制
2,异步调用微信接口,根据微信返回状态对出业务逻辑响应。
3, Servlet中的过滤器(过滤器)是基于回调函数,需容器支持。

补充:其中过滤器(过滤器)和拦截器(拦截器)的区别,拦截器基于是Java的反射机制,和容器无关。但与回调机制有异曲同工之妙。

总之,这设计让底层代码调用高层定义(实现层)的子程序,增强了程序的灵活性。

<强>四、模式对比

上面讲了过滤器和拦截器有着异曲同工之妙,其实接口回调机制和一种设计模式,观察者模式也有相似之处:

观察者模式:

GOF说道——“定义对象的一种一对多的依赖关系,当一个对象的状态发送改变的时候,所有对他依赖的对象都被通知到并更新。”它是一种模式,是通过接口回调的方法实现的,即它是一种回调的体现。

Java项目中如何实现异步回调