java中的回调机制

  java中的回调简单来说就是A类调了B类里面的C方法,结果是B类调了A类里面的D方法。其中D就是回调方法,它存在于接口中,由A实现。回调分为同步回调和异步回调。他们之间的区别在于返回结果是否需要等待,若有延迟则为异步回调,否则为同步回调。下面为代码示例:

public interface CSCallBack {//回调接口
    public void process(String status);//回调方法
}

public class Client implements CSCallBack {//A类

    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() {
                Thread.sleep(2000);
            //相当于A类调了B类里面的C方法
                server.getClientMsg(Client.this,msg);
            }
        }).start();
        System.out.println("客户端:异步发送成功");
    }

    @Override
    public void process(String status) {//D方法,回调方法
        System.out.println("客户端:服务端回调状态为:" + status);
    }
}


public class Server {//B类

    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);//相当于B类调了A类里面的D方法
    }
}
文章目录
|