国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

多線程異步調用等待響應結果后繼續處理

2019-11-11 02:10:42
字體:
來源:轉載
供稿:網友
1、在有響應的時候,使用ResponseFuture對象,并在onResponse方法中,將響應設置到Futrue中。

import com.google.common.util.concurrent.AbstractFuture;

public class ResponseFuture<JsonPRotocol>extends AbstractFuture<JsonProtocol>

{

    private final Executorexecutor;

    public ResponseFuture()

    {

        if (ThreadLocalUtil.get("isServer") ==null)

        {

            //TODO 這里是錯誤的,把這行代碼移到一個單例的全局共享中取,避免每次new。如果是服務端,那么所有的服務端都共享一個線程池

            executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(),

                    new RpcThreadFacotry("CallBack"));

        }

        else

        {

            //單線程執行器

            executor = MoreExecutors.directExecutor();

        }

    }

    /**

     * 當響應回來的時候,結果被設置到future中,因此從future中可以獲得一個異步的響應結果

     * @param responseProtocol

     */

    public void onResponse(JsonProtocolresponseProtocol)

    {

        //向future中設置值

        super.set(responseProtocol);

    }

    /**

     * 當響應有結果時候可以直接runnable的方法

     * @param runnable

     */

    public void addCallBack(Runnablerunnable)

    {

        super.addListener(runnable,executor);

    }

}

2、等待線程獲得響應結果(使用future.get阻塞等待異步線程的響應)

        ResponseFuture<JsonProtocol>reponseFuture = client.futureInvoke(JsonProtocolReqeust);

        JsonProtocol JsonProtocolResponse =null;

        try

        {

            JsonProtocolResponse =reponseFuture.get(JsonProtocolReqeust.getRpcMetadata().getTimeOut(),

                    TimeUnit.MILLISECONDS);

        }

        catch (ExecutionException e){}

        catch (TimeoutException e)

        {

            throw new RuntimeException("調用遠程服務響應超時",e);

        }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 饶河县| 河源市| 长沙县| 定南县| 湘阴县| 秀山| 雷波县| 吴旗县| 子长县| 麻栗坡县| 元谋县| 商都县| 台安县| 陈巴尔虎旗| 合江县| 明溪县| 桐乡市| 呈贡县| 高邑县| 陆良县| 台北县| 余庆县| 呼玛县| 淅川县| 普定县| 内黄县| 宾阳县| 沾化县| 泰宁县| 镇宁| 山东省| 东乌| 夏河县| 萝北县| 临桂县| 嘉荫县| 武宁县| 潢川县| 闽侯县| 封丘县| 临颍县|