免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
軟件首頁 |  文章首頁
最新更新 軟件分類 設為首頁 加入收藏 聯系我們
當前位置:首頁文章首頁 IT學院 Java

多線程開發的捷徑:構建Java并發模型框架

作者:東坡下載  來源:uzzf  發布時間:2010-10-14 12:04:04  點擊:

  14.            try {

  15.                   wait();

  16.            }catch (InterruptedException e) {

  17.                   e.printStackTrace();

  18.            }

  19.        }

  20.

  21.        _queue.push(mr);

  22.        notifyAll();

  23.        System.out.println("Leave Queue");

  24.    }

  25.    public synchronized MethodRequest dequeue() {

  26.        MethodRequest mr;

  27.

  28.        while(_queue.empty()) {

  29.            try {

  30.                wait();

  31.            }catch (InterruptedException e) {

  32.                e.printStackTrace();

  33.            }

  34.        }

  35.        mr = (MethodRequest)_queue.pop();

  36.        notifyAll();

  37.

  38. return mr;

  39.    }

  40.    private Stack _queue;

  41.    private final static int QUEUE_SIZE = 20;

  42.}

  43.//ActiveObject的定義

  44.class ActiveObject extends Thread

  45.{

  46.    public ActiveObject() {

  47.        _queue = new ActiveQueue();

  48.        start();

  49.    }

  50.    public void enqueue(MethodRequest mr) {

  51.        _queue.enqueue(mr);

  52.    }

  53.    public void run() {

  54.        while(true) {

  55.            MethodRequest mr = _queue.dequeue();

  56.            mr.call();

  57.        }

  58.    }

  59.    private ActiveQueue _queue;

  60.}

  通過上面的代碼可以看出正是這些類相互合作完成了對并發邏輯的封裝。開發者只需要根據需要實現MethodRequest接口,另外再定義一個服務代理類提供給使用者,在服務代理者類中把服務調用者的請求轉化為MethodRequest實現,交給活動對象即可。

  使用該框架,可以較好的做到應用邏輯和并發模型的分離,從而使開發者集中精力于應用領域,然后平滑的和并發模型結合起來,并且可以針對ActiveQueue定制排隊機制,比如基于優先級等。

基于框架的解決方案

  本小節將使用上述的框架重新實現前面的例子,提供對于并發的支持。第一步先完成對于MethodRequest的實現,對于我們的例子來說實現如下:

  1.class SayHello implements MethodRequest

  2.{

  3.    public SayHello(Service s) {

  4.        _service = s;

  5.    }

  6.    public void call() {

  7.        _service.sayHello();

  8.    }

  9.    private Service _service;

  10.}

  該類完成了對于服務提供接口sayHello方法的封裝。接下來定義一個服務代理類,來完成請求的封裝、排隊功能,當然為了做到對Client透明,該類必須實現Service接口。定義如下:

  11.class ServiceProxy implements Service

  12.{

  13.    public ServiceProxy() {

  14.        _service = new ServiceImp();

  15.        _active_object = new ActiveObject();

  16.    }

  17.

  18.    public void sayHello() {

  19.        MethodRequest mr = new SayHello(_service);

  20.        _active_object.enqueue(mr);

  21.    }

  22.    private Service _service;

  23.    private ActiveObject _active_object;

  24.}

  其他的類和接口定義不變,下面對比一下并發邏輯增加前后的服務調用的變化,并發邏輯增加前,對于sayHello服務的調用方法:

  25.Service s = new ServiceImp();

  26.Client c = new Client(s);

  27.c.requestService();

  并發邏輯增加后,對于sayHello服務的調用方法:

  28.Service s = new  ServiceProxy();

  29.Client c = new Client(s);

  30.c.requestService();

  可以看出并發邏輯增加前后對于Client的ServiceImp都無需作任何改變,使用方式也非常一致,ServiceImp也能夠獨立的進行重用。類結構圖如下:

類結構圖

首頁 上一頁 [1] [2] [3]  下一頁 尾頁

文章評論

本類推薦文章

關于本站 | 網站幫助 | 廣告合作 | 下載聲明 | 友情連接 | 網站地圖
Copyright © 20098-2010 uzzf下載站. All Rights Reserved .
免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
主站蜘蛛池模板: v一区无码内射国产| 中文字幕人妻偷伦在线视频 | www.99精品| 黄站在线观看| 日韩精品视频美在线精品视频| 99热精品久久只有精品30| 欧美人与物videos另类xxxxx| 亚洲精品91在线| 日本免费电影在线观看| 国产欧美精品一区二区三区-老狼| 少妇性俱乐部纵欲狂欢少妇| a网站在线观看| 久久无码精品一区二区三区| 国产精品自在欧美一区| 亚洲成AV人片在线播放无码 | 精品国产污污免费网站入口| 狠狠躁夜夜躁人人爽天天天天97| 国内不卡1区2区| 亚洲午夜成激人情在线影院| 国产1区2区在线观看| 蜜桃精品免费久久久久影院| 欧美高清国产在线观看| 久久国产精品二国产精品| 久久国产精品视频一区| 国产一毛片| 国产日韩综合一区二区性色av| 欧美猛少妇色xxxxx| 欧美与黑人午夜性猛交久久久| 熟妇人妻无码XXX视频| av免费不卡国产观看| 国产日韩av在线播放| 久久久久久国产精品mv | 国产精品永久久久久久久久久 | 一本到在线观看视频| 狂野欧美性猛xxxx乱大交| 中文无码人妻有码人妻中文字幕| 国产50部艳色禁片无码| 国产视频2021| 波多野结衣丝袜美腿| 91在i线观| 好黄好猛好爽好痛的视频|