Java 异步回调机制实例解析

1、什么是回调

软件模块之间老是存在着必定的接口,从调用方式上,能够把他们分为三类:同步调用、回调和异步调用。java

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

  • 一、同步回调,即阻塞,单向。
  • 二、回调,即双向(相似自行车的两个齿轮)。
  • 三、异步调用,即经过异步消息进行通知。

2、CS中的异步回调(java案例)

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

回调接口类:测试

/** 
* @author Jeff Lee 
* @since 2015-10-21 21:34:21 
* 回调模式-回调接口类 
*/ 
public interface CSCallBack { 
    public void process(String status); 
}

模拟客户端:this

/** 
* @author Jeff Lee 
* @since 2015-10-21 21:25:14 
* 回调模式-模拟客户端类 
*/ 
public class Client implements CSCallBack { 
 
    private Server server; 
 
    public Client(Server server) { 
        this.server = server; 
    } 
 
    public void sendMsg(final String msg){ 
        System.out.println("客户端:发送的消息为:" + msg); 
        new Thread(new Runnable() { 
            @Override 
            public void run() { 
                server.getClientMsg(Client.this,msg); 
            } 
        }).start(); 
        System.out.println("客户端:异步发送成功"); 
    } 
 
    @Override 
    public void process(String status) { 
        System.out.println("客户端:服务端回调状态为:" + status); 
    } 
}

模拟服务端:code

/** 
* @author Jeff Lee 
* @since 2015-10-21 21:24:15 
* 回调模式-模拟服务端类 
*/ 
public class Server { 
 
    public void getClientMsg(CSCallBack csCallBack , String msg) { 
        System.out.println("服务端:服务端接收到客户端发送的消息为:" + msg); 
 
        // 模拟服务端须要对数据处理 
        try { 
            Thread.sleep(5 * 1000); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
        } 
        System.out.println("服务端:数据处理成功,返回成功状态 200"); 
        String status = "200"; 
        csCallBack.process(status); 
    } 
}

测试类:server

/** 
* @author Jeff Lee 
* @since 2015-10-21 21:24:15 
* 回调模式-测试类 
*/ 
public class CallBackTest { 
    public static void main(String[] args) { 
        Server server = new Server(); 
        Client client = new Client(server); 
 
        client.sendMsg("Server,Hello~"); 
    } 
}
相关文章
相关标签/搜索