美文网首页
Java回调机制

Java回调机制

作者: ALEXIRC | 来源:发表于2017-02-24 16:10 被阅读62次

参考:http://www.bysocket.com/?p=636

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

回调接口类

public interface CSCallBack
{
    public void process(String status);
}

模拟客户端

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);
    }
}

模拟服务端

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);
    }
}

测试类

public class CallBackTest
{
    public static void main(String[] args)
    {
        Server server = new Server();
        Client client = new Client(server);

        client.sendMsg("Server , Hello~");
    }
}

输出结果
客户端:发送的消息为:Server , Hello~
客户端:异步发送成功
服务端:服务器端接收到客户端发送的消息为:Server , Hello~
服务器端:数据处理成功,返回成功状态 200
客户端:服务器端回调状态为:200

这里可能会有疑问,就是为什么是先打印“异步发送成功”,然后再执行新的线程。
把客户端的代码改一下

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();
        //修改的地方在这里,添加了一个循环
        for(int i =0; i < 5; i++)
        {
            System.out.println("客户端:异步发送成功----" + i );
        }
    }
    @Override
    public void process(String status)
    {
        System.out.println("客户端:服务器端回调状态为:" + status);
    }
}

输出结果
客户端:发送的消息为:Server , Hello~
客户端:异步发送成功----0
客户端:异步发送成功----1
服务端:服务器端接收到客户端发送的消息为:Server , Hello~
客户端:异步发送成功----2
服务器端:数据处理成功,返回成功状态 200
客户端:异步发送成功----3
客户端:服务器端回调状态为:200
客户端:异步发送成功----4

可以看到这里体现了线程的时间片轮转机制。

相关文章

  • Thinging in Java阅读时遇到的问题

    菜鸟教程Java回调机制解读Java回调机制总结内部类标识符JAVA foreach和普通for循环是否需要判断为...

  • Java相关博客推荐阅读--Java回调机制

    Java回调机制 这篇文章循循渐进的介绍了什么是Java回调机制,以及在Java中的简单实现。通过形象生动的例子,...

  • Java基础9:解读Java回调机制

    本文主要介绍了Java中的回调机制,以及Java多线程中类似回调的机制。 具体代码在我的GitHub中可以找到 h...

  • java接口回调机制

    转载的正文 地址--理解java接口回调机制

  • java回调机制

    回调的基本概念 在java中,我们可以将回调简单理解为:类A中的a方法调用类B中的b方法,而类B的b方法有反过来调...

  • java回调机制

    java的调用机制主要分为同步调用、异步调用、回调这三种,当然也包括一些其它的,例如异步回调等。 同步调用是我们平...

  • Java回调机制

     回调是一种设计模式,应用场景:即为了避免阻塞,新开线程去执行任务,当新开的线程把任务执行完毕,需要返回通知结果。...

  • Java回调机制

    最近一直在想罗振宇老师说的一段话,大致如下:任何一个行业都有自己的独特性,你要是能将自己行业独有的认知模型用质朴的...

  • Java 回调机制

    参考链接 Java回调机制解读 回调的思想 类A的a()方法调用类B的b()方法 类B的b()方法执行完毕主动调用...

  • Java回调机制

    前言 Java 回调学习文章 这个是目前讲回调讲的最好的一片文章, 三点建议: 其中使用了内部类,不用也是可以的,...

网友评论

      本文标题:Java回调机制

      本文链接:https://www.haomeiwen.com/subject/poewwttx.html