<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    太陽雨

    痛并快樂著

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      67 Posts :: 3 Stories :: 33 Comments :: 0 Trackbacks

     

    在有些方法里, 比如登陸,一般需要順序調用多個系統功能才能完成初始化操作.
    比如 安全校驗-》獲取用戶權限-》獲取用戶設置信息-》獲取系統字典 等等, 在某些EAI模式的應用里,這些調用可能都是遠程調用,每個調用時間可能從0.5秒到數秒不等, 這樣累計下來用戶一個登陸操作,在后臺處理時間可能就有3,4秒,加上網絡傳輸延時,會主觀上給用戶造成系統很慢的感覺。

    在單個方法調用效率無法改進的前提下,一個簡單的辦法是將調用方式由串行改為并行,即以多個thread分別去完成方法調用,最后匯總。

    在java 5以前,因為線程的特性限制,必須手工編碼實現線程完成狀態的調用檢查。

    比如
     // thread 
    public void run() {
        ......
       finished = true;
     }
      
      public boolean isFinished() {
       return finished;
      }


    // 以阻塞循環的方式檢查是否執行完畢
    while(!remoteCall.isFinished()) {
        try {
            Thread.sleep(100);
       } catch (InterruptedException e) {
         e.printStackTrace();
        }
    }

    這樣的代碼是繁瑣,較低效率,也容易出錯的,尤其在線程多于2個的時候。而在服務器方代碼中過多的線程使用又可能會導致內存溢出和資源泄露。

    今天翻書的時候發現java 5中的cucurrent包對此進行了改進 繼承自Callable 的類有能力將執行結果返回,并且可以自行檢查執行是否結束。

      public class RandomPrimeSearch implements Callable<BigInteger> {
           public BigInteger call( ) {
                // do operation here
                return BigInteger.probablePrime(bitSize, prng);
           }
      }

      FutureTask<BigInteger> task =     new FutureTask<BigInteger>(new RandomPrimeSearch(512));  //需要利用泛型模板返回處理結果
      new Thread(task).start( );

      BigInteger result = task.get( );  //此處會自動判斷是否執行結束,未結束會繼續等待。也可以設定最大等待時間
        
        //為了提高效率 也可以使用service方式調用
        ExecutorService service = Executors.newFixedThreadPool(5);

        Future<BigInteger> prime1 = service.submit(new RandomPrimeSearch(512));


    這樣一來,使用這種并發模式處理代碼就容易多了。程序可以簡單的修改為這樣的結構
    remoateCall1 = doRemoteCall1();  // 啟動線程1 將方法處理以封裝到線程中
    remoateCall2 = doRemoteCall2();  // 啟動線程2

    remoteCall1.get().getUserSetting() ;
    remoteCall2.get().getDictionaryList(); 
    ....

    呵呵,基本和順序執行時差不多,代碼修改量比較小。

    java 5中引入了線程執行服務ExecutorService 的概念以后, 如果以線程池的方式執行線程調用,資源消耗會大幅度減少,所以不用太擔心并發處理會產生過多的系統負荷。
    posted on 2008-11-02 14:52 小蟲旺福 閱讀(346) 評論(0)  編輯  收藏 所屬分類: javaEE
    主站蜘蛛池模板: 亚洲性线免费观看视频成熟| 日本黄色免费观看| 亚洲第一网站免费视频| 免费国产美女爽到喷出水来视频| 亚洲AV无码久久| 狠狠入ady亚洲精品| 91精品导航在线网址免费| 亚洲AV永久无码精品一区二区国产 | 中文字幕免费视频精品一| 亚洲免费福利在线视频| 国产成人精品日本亚洲11| 波多野结衣免费一区视频| 免费在线观看的黄色网址| 一级免费黄色大片| 日韩成人在线免费视频| 色综合久久精品亚洲国产| 久久精品免费全国观看国产| 亚洲日本VA午夜在线电影| 免费观看国产网址你懂的| 久久久久亚洲Av片无码v| 精品久久久久久无码免费| 日韩免费电影在线观看| 丰满少妇作爱视频免费观看| 色久悠悠婷婷综合在线亚洲| 立即播放免费毛片一级| 免费在线观看的网站| 亚洲成av人片在线看片| 69影院毛片免费观看视频在线| 激情综合亚洲色婷婷五月APP| 2022久久国产精品免费热麻豆| jiz zz在亚洲| 免费观看a级毛片| 亚洲AV无码专区在线电影成人| 国产黄色一级毛片亚洲黄片大全 | 成人无码精品1区2区3区免费看| 亚洲成年轻人电影网站www| 成人免费视频小说| 亚洲AV综合永久无码精品天堂 | 久久精品国产精品亚洲人人| 成人精品综合免费视频| 亚洲熟女乱综合一区二区|