<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java并行程序設計模式小結

      這里總結幾種常用的并行程序設計方法,其中部分文字源自《Java程序性能優化》一書中,還有部分文字屬于個人總結,如有不對,請大家指出討論。

      Future模式

      一句話,將客戶端請求的處理過程從同步改為異步,以便將客戶端解放出來,在服務端程序處理期間可以去干點其他事情,最后再來取請求的結果。

      好處在于整個調用過程中不需要等待,可以充分利用所有的時間片段,提高系統的響應速度。

      JDK中已經內置實現了FutureTask,使用起來非常方便,同時還可以取消Future任務,或者設置Future任務的超時時間。

      1)實現一個Callable接口,實現服務端的具體的業務邏輯計算:

      public class RealData implements Callable<String> {
          public String call() throws Exception {...}
      }

      2)定義FutureTask,提交執行,獲取返回結果:

      // 1. create future task
      FutureTask<String> future = new FutureTask<String>(new RealData("aaa"));
      // 2. submit future task
      ExecutorService exexutor = Executors.newFixedThreadPool(1);
      exector.submit(future);
      // 3. do other thing
      ......
      // 4. get result, waiting util call method finished
      System.out.println("Result:" + future.get());

      Master-Worker模式

      由兩類線程實現:Master線程負責接收和分發任務(將任務拆成一個個的子任務);Worker線程負責處理子任務,每個Worker線程只處理部分任務,所有Worker線程共同完成所有任務的處理。

      好處在于能夠將一個大的任務拆分成若干個小的任務,從而交給不同的Worker并行的進行處理,進而提高系統的吞吐量。另外,Client端一旦提交任務后,Master線程完成任務的接收和分發后立即返回,因此對客戶端來說,整個過程也是異步進行的。

      一般的實現思路如下:

      1)Master中首先需要維護一個隊列Queue,用于接收任務,同時維護一個所有Worker線程的threadMap,以及每個子任務對應的處理結果集resultMap,這里由于涉及到多線程同時訪問resultMap,因此一般使用JDK中的ConcurrentHashMap實現;

      2)Worker線程實現Runnable或繼承Thread,通過Master中的Queue獲取拆分后的子任務,并進行業務處理,并將處理結果設置到resultMap中以便Master獲取到;

      3)Main入口函數則負責客戶端請求的提交(需要先進程拆解),以及通過Master獲取各個Worker的結果后進行合并,最后返回給客戶端完成處理過程。

      Guarded Suspension模式

      所謂“保護暫停”模式,核心思想在于僅當服務進程準備好時,才提供服務。

      好處在于既能保證所有的客戶端請求均不丟失,同時也避免了服務器由于同時處理太多的請求而崩潰的現象,有效降低系統的瞬時負載,有助于系統穩定性。

      其實這種通過中間加一層Queue做緩沖的模式在工作中用的很多,類似“ClientThread -> Request Queue -> ServerThread”的情況比比皆是,只不過可能實際中我們往往會結合其他方法一起使用,例如:

      1)將ClientThread和ServerThread均為多個,則變為經典的“生產者-消費者”模式;

      2)如果將ServerThread拆為1個Master和多個Worker,則又是上面提到的“Master-Worker”模式;

      3)如果處理的請求需要返回結果,那么又需要和FutureTask結合起來使用(即:客戶端的請求中需要帶上FutureData,并在ServerThread中為FutureData設置上RealData)。

      不變模式

      并發多線程程序中,當多線程對同一個對象進行讀寫操作時,為了確保對象數據的一致性和準確性,必須進行同步操作,而這正是對系統性能損失嚴重的地方。因此,為了提高并發并發程序的性能,我們可以創建一種不可改變的對象,使用過程中保持不變性。這就是所謂“不變”模式。Java中這種模式用的很廣,如String、Boolean、Short、Integer、Long、Byte等。

      好處在于通過回避問題而不是解決問題的態度來處理多線程并發訪問控制,但缺點是只適用于對象創建后內部狀態和數據不可發生變化的情況。

      Java中不變模式的實現很簡單,按照OO的思想,只需要滿足以下幾點即可:

      1)將對象的所有屬性設為private final的;

      2)通過final修飾class確保類不可被繼承;

      3)去掉對象中的所有settXX方法;

      4)有包含所有屬性的構造函數用于創建對象。

      生產者-消費者模式

      生產者線程向內存緩沖區提交任務,消費者線程從內存緩沖區獲取任務并進行處理。

      好處在于將生產者線程和消費者線程進行解耦,優化系統整體結構,緩解性能瓶頸對系統性能的影響。

      Java中,一般來說使用LinkedBlockingQueue作為上面說的“內存緩沖區”,它是阻塞型BlockingQueue的一種使用Link List的實現,它對頭和尾采用兩把不同的鎖,與ArrayBlockingQueue相比提高了吞吐量,適合于實現“生產者-消費者”模式。實現的大致思路如下:

      1)創建Producer類,實現run方法用于提交任務;

      2)創建Consumer類,實現run方法用于處理任務;

      3)Main函數中建立緩沖區,若干個生產者,若干個消費者,創建線程池并開始使這些線程工作起來。

      posted on 2014-01-29 14:16  大圓那些事  閱讀(6976)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 免费AV片在线观看网址| 又爽又黄又无遮掩的免费视频| 亚洲一区成人在线视频| 一区二区偷拍美女撒尿视频| 图木舒克市| 亚洲国产精品一区二区三| 亚洲精品麻豆一区二区| 亚洲天堂在线观看完整版| 久久99精品久久久久久| 亚洲精品不卡无码福利在线观看| 人人妻人人妻人人片色av| 国产精品黄色片| 这里只有精品免费视频| 中文字幕无码乱码人妻系列蜜桃| 国产精品自偷一区在线观看| 国产精品亚洲中文字幕| 亚洲 制服 丝袜 无码| 欧美人人妻人人澡人人尤物| 四虎影视一区二区精品| 欧美精品久久天天躁| 久久AV中文综合一区二区| 成av人电影在线观看| 日本不卡一区| 中文字幕无线码中文字幕| 小嫩批日出水无码视频免费| 国产精品久久久尹人香蕉| 激情综合色综合啪啪开心| 亚洲精品国产av成拍色拍个| 人妻教师痴汉电车波多野结衣| 罗甸县| 国产肥妇一区二区熟女精品| 日本牲交大片免费观看| 国产影片AV级毛片特别刺激 | av男人的天堂在线观看国产| 农村妇女野外一区二区视频| 99久久精品费精品国产一区二| 2020国产欧洲精品网站| 亚洲一区二区三区啪啪| 国内少妇人妻偷人精品视频| 欧美亚洲另类自拍偷在线拍| 美姑县|