Java回調(diào)機(jī)制

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

這里模擬個(gè)場景:客戶端發(fā)送msg給服務(wù)端,服務(wù)端處理后(5秒),回調(diào)給客戶端,告知處理成功。代碼如下:

回調(diào)接口類

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("客戶端:發(fā)送的消息為:" + msg);
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                server.getClientMsg(Client.this, msg);
            }
        }).start();
        System.out.println("客戶端:異步發(fā)送成功" );
    }
    @Override
    public void process(String status)
    {
        System.out.println("客戶端:服務(wù)器端回調(diào)狀態(tài)為:" + status);
    }
}

模擬服務(wù)端

public class Server
{
    public void getClientMsg(CSCallBack csCallback, String msg)
    {
        System.out.println("服務(wù)端:服務(wù)器端接收到客戶端發(fā)送的消息為:" + msg);   
        try
        {
            Thread.sleep( 5 * 1000);
        }catch(InterruptedException e)
        {
            e.printStackTrace();
        }
        System.out.println("服務(wù)器端:數(shù)據(jù)處理成功,返回成功狀態(tài) 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~");
    }
}

輸出結(jié)果
客戶端:發(fā)送的消息為:Server , Hello~
客戶端:異步發(fā)送成功
服務(wù)端:服務(wù)器端接收到客戶端發(fā)送的消息為:Server , Hello~
服務(wù)器端:數(shù)據(jù)處理成功,返回成功狀態(tài) 200
客戶端:服務(wù)器端回調(diào)狀態(tài)為:200

這里可能會(huì)有疑問,就是為什么是先打印“異步發(fā)送成功”,然后再執(zhí)行新的線程。
把客戶端的代碼改一下

public class Client implements CSCallBack
{
    private Server server;

    public Client(Server server)
    {
        this.server = server;
    }
    public void sendMsg(final String msg)
    {
        System.out.println("客戶端:發(fā)送的消息為:" + msg);

        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                server.getClientMsg(Client.this, msg);
            }
        }).start();
        //修改的地方在這里,添加了一個(gè)循環(huán)
        for(int i =0; i < 5; i++)
        {
            System.out.println("客戶端:異步發(fā)送成功----" + i );
        }
    }
    @Override
    public void process(String status)
    {
        System.out.println("客戶端:服務(wù)器端回調(diào)狀態(tài)為:" + status);
    }
}

輸出結(jié)果
客戶端:發(fā)送的消息為:Server , Hello~
客戶端:異步發(fā)送成功----0
客戶端:異步發(fā)送成功----1
服務(wù)端:服務(wù)器端接收到客戶端發(fā)送的消息為:Server , Hello~
客戶端:異步發(fā)送成功----2
服務(wù)器端:數(shù)據(jù)處理成功,返回成功狀態(tài) 200
客戶端:異步發(fā)送成功----3
客戶端:服務(wù)器端回調(diào)狀態(tài)為:200
客戶端:異步發(fā)送成功----4

可以看到這里體現(xiàn)了線程的時(shí)間片輪轉(zhuǎn)機(jī)制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 轉(zhuǎn)載自Java回調(diào)機(jī)制解析 模塊之間總是存在這一定的接口,從調(diào)用方式上看,可以分為三類:同步調(diào)用、回調(diào)和異步調(diào)用。...
    抓兔子的貓閱讀 703評論 0 8
  • 曾經(jīng)自己偶爾聽說過回調(diào)機(jī)制,隱隱約約能夠懂一些意思,但是當(dāng)讓自己寫一個(gè)簡單的示例程序時(shí),自己就傻眼了。隨著工作經(jīng)驗(yàn)...
    zhglance閱讀 6,984評論 5 4
  • 前言 Java 回調(diào)學(xué)習(xí)文章 這個(gè)是目前講回調(diào)講的最好的一片文章, 三點(diǎn)建議: 其中使用了內(nèi)部類,不用也是可以的,...
    張家小2閱讀 738評論 0 0
  • 今天回了鄉(xiāng)下六孃家。 昨晚沒睡好,今早如約起床跑步,但今天精神狀況的確不怎么好,一直有沉重感!早上一行人去了六孃摘...
    茶心1閱讀 342評論 6 3

友情鏈接更多精彩內(nèi)容