09.并發(fā)編程之future模式

    package demo4;

    public interface Data {
        String getRequest();
    }
    package demo4;

    public class RealData implements Data {
        private String result;

        public RealData(String queryStr){
            System.out.println("根據(jù)" + queryStr + "進(jìn)行查詢,這是一個很耗時的操作");
            try{
                Thread.sleep(5000);
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            System.out.println("操作完畢,獲得結(jié)果");
            result = "查詢結(jié)果";
        }

        @Override
        public String getRequest() {
            return result;
        }

    }
    package demo4;

    public class FutureData implements Data {
        private RealData    realData;
        private boolean     isReady = false;

        public synchronized void setRealData(RealData realData) {
            // 如果已經(jīng)裝載完成了脊框,就直接返回
            if (isReady) {
                return;
            }
            // 如果沒有裝載完窟扑,進(jìn)行裝載真實對象
            this.realData = realData;
            isReady = true;
            notify();
        }

        public synchronized String getRequest() {
            // 如果沒有裝載好孽亲,程序就一直處理阻塞狀態(tài)
            while (!isReady) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // 裝載好直接讀取數(shù)據(jù)即可
            return this.realData.getRequest();
        }

    }
    package demo4;

    public class Main {
        public static void main(String[] args) {
            FutureClient fc = new FutureClient();
            Data data = fc.request("請求參數(shù)");
            System.out.println("請求發(fā)送成功涯肩!");
            System.out.println("做其他的事情...");
            
            String result = data.getRequest();
            System.out.println(result);
        }
    }
    package demo4;

    public class FutureClient {
        public Data request(final String queryStr) {
            // 1被辑、我想要一個代理對象(Data接口的實現(xiàn)類)先返回給發(fā)送請求的客戶端挽封,告訴他請求已經(jīng)收到已球,可以做其他的事情
            final FutureData futureData = new FutureData();
            // 2、啟動一個新的線程辅愿,去加載真實的數(shù)據(jù)智亮,傳遞給這個代理對象
            new Thread(new Runnable() {

                @Override
                public void run() {
                    // 3、這個新的線程可以去慢慢地加載這個真實對象点待,然后傳遞給代理對象
                    RealData realData = new RealData(queryStr);
                    futureData.setRealData(realData);

                }

            }).start();
            return futureData;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阔蛉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子癞埠,更是在濱河造成了極大的恐慌状原,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苗踪,死亡現(xiàn)場離奇詭異颠区,居然都是意外死亡,警方通過查閱死者的電腦和手機通铲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門毕莱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颅夺,你說我怎么就攤上這事朋截。” “怎么了吧黄?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵部服,是天一觀的道長。 經(jīng)常有香客問我拗慨,道長廓八,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任赵抢,我火速辦了婚禮瘫想,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昌讲。我一直安慰自己,他們只是感情好减噪,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布短绸。 她就那樣靜靜地躺著车吹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醋闭。 梳的紋絲不亂的頭發(fā)上窄驹,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音证逻,去河邊找鬼乐埠。 笑死,一個胖子當(dāng)著我的面吹牛囚企,可吹牛的內(nèi)容都是我干的丈咐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼龙宏,長吁一口氣:“原來是場噩夢啊……” “哼棵逊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起银酗,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辆影,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后黍特,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛙讥,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年灭衷,在試婚紗的時候發(fā)現(xiàn)自己被綠了次慢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡今布,死狀恐怖经备,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情部默,我是刑警寧澤侵蒙,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站傅蹂,受9級特大地震影響纷闺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜份蝴,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一犁功、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婚夫,春花似錦浸卦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽靴庆。三九已至,卻和暖如春怒医,著一層夾襖步出監(jiān)牢的瞬間炉抒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工稚叹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焰薄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓扒袖,卻偏偏與公主長得像塞茅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子僚稿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容