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~"); 
    } 
}
相關文章
相關標籤/搜索