异步处理

来源:互联网 发布:淘宝零点抢购 编辑:程序博客网 时间:2024/05/21 15:41
  • 什么是异步处理,官方说法:异步处理就是按照不同步的程序处理问题,与同步处理相对。这简直就是废话?我举个例子来说什么是异步处理。比如:
    你是个倒霉蛋,被很多人借了钱,你向张三要他还钱,他说没钱要几天后还,然后几天后你依旧向张三要钱,如果他拖着不还,你就一直等着,如果庆幸他还了,你在继续向李四要钱。这就是
    同步处理, 当你向张三要钱之后并向李四要钱这就是异步处理,你不用一直等张三给你钱后在向其他人要,这是异步处理的特点。

    以下我实现了一个简单异步处理的代码,分为WebClient客户端,Server服务器,AhCallback接口,客户端实现接口
    选择什么时候用 异步处理,回调信息,服务段接受客户端信息并通过接口返回信息,
    接口作用抽象出回调函数让客户端实现(有人要问了,为什么要这么做,不用这个可以吗?答案是可以,你也可以通过其他方式实现,不过那样不好,利用接口体现面对对象编程的思想,提高代码的鲁棒性,你要想成为大牛重在理解思想)。

public interface AhCallback {    /**     * @author JLH     * @since 2017/6/3     * AhCallback回掉接口     * ahCallback回掉函数     * */   public void ahCallback(String back);}//服务器类public class Server {   public void serverView(WebCilent wc,String str){       System.out.println("服务端接受到   "+str);    //可加可不加,模拟网络延迟          try {        Thread.sleep(3000);    } catch (InterruptedException e) {        e.printStackTrace();    }       //回调,回调成功200表示       wc.ahCallback("200");   }}//客户端类public class WebCilent implements AhCallback{    /**     * @author JLH     * @since 2017/6/3     * 模拟客户端     * */    private Server server;    public WebCilent(Server server){        this.server=server;    }    //实现简单异步调用    public void webCilent(final String str){        new Thread(){            public void run(){                server.serverView(WebCilent.this, str);            }        }.start();    }    @Override    public void ahCallback(String back) {        System.out.println("接收服务器传回数据  "+back);    }}//测试类import org.junit.Test;public class CallBackTest {   /*  @Test    public void callback(){        Server server=new Server();        WebCilent wc=new WebCilent(server);        wc.webCilent("hello");    }*/     public static void main(String[] args) {         Server server=new Server();        WebCilent wc=new WebCilent(server);        wc.webCilent("hello");    }}
  • 这里发生意见有趣的事,就是单元测试Junit不支持多线程,它不会等你吧子线程里的东西运行完在结束的,如果要使用单元测试就要使用GroboUtils
    了,感兴趣的话你可以google下。

**异步处理典型的一个代表
是AJAX的异步处理。一般用来显示登陆或者其它列表,目前这是我碰到的运用场景。**

原创粉丝点击