首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

多執行緒程式設計五大核心模式:從 Balking 到 Two-Phase Termination

     編輯:Java 程式設計入門

我這裡可以大概給你介紹一下,但對於每一種程式設計模式要看具體的範例是什麼,而且我不可能給你羅列所有的程式碼,請諒解。

其實我們程式設計只要盡量站到比較高的層次,很多道理其實你會發現你已經懂了。

就多執行緒來說,我們開始設想只有兩個執行緒(>2 時是不是算數學歸納法?)那麼假如兩個獨立的執行緒會發生什麼呢?

五大經典多執行緒模式

  1. Balking 模式(放棄模式)

    當一個執行緒進入 monitor(也就是說佔用一個 object),另一個執行緒只有等待或返回,而我們把返回就稱為一種模式,這種模式的英文是 Balking。

  2. Scheduler 模式(排程器模式)

    這兩個執行緒可以是有序的執行,而不是讓 OS 來調度,這時我們要用一個 object 來調度,這種模式稱為 Scheduler。(這個詞及其含義其實 OS 中就有)。

  3. Read/Write Lock 模式(讀寫鎖模式)

    假如這兩個執行緒同時讀一個資源,我們可以讓他們執行,但假如同時寫的話,你閉著眼睛都會知道可能出現問題,這時我們就要用另一種模式(Read/Write Lock)。

  4. Producer-Consumer 模式(生產者-消費者模式)

    假如一個執行緒是為另一個執行緒服務的話,比如 IE 中負責資料傳輸的執行緒和介面顯示的執行緒,當一張圖片沒有傳完時,另一個執行緒就無法顯示,至少是部分沒有傳完。那麼這時我們要用一個模式稱為生產者和消費者,英文是 Producer-Consumer。

  5. Two-Phase Termination 模式(兩階段終止模式)

    兩個執行緒的消亡也可以不是完全由 OS 來控制的,這時我們需要給出一個條件,使得每個執行緒在符合條件時才消亡,也就是有序的消亡,我們稱為 Two-Phase Termination。

三點重要啟示

  1. 從高層次上我們可以再驗證是否涵蓋了所有的情況。
  2. 其實模式不是完全固定的或者說像定律一樣,而模式可以為不同的情況進行適當的調整和組合,目的是為了簡潔和高效。
  3. 學習模式是為了具備更好的分析問題的能力。

而似乎這些來自西方的技術,並且是目前的,我們有沒有呢?其實我個人有個大膽的推測,我認為我們祖先的《孫子兵法》就是很好設計模式,因為它符合設計模式需要的基本特徵,就是在特定的條件下,用某種特定的方式合理且高效的解決問題。只不過一是用在軍事上,二是完備性方面我們還沒研究。但我認為我們至少沒有很好的擴展和進行類比式的應用,否則今天可能是我們中國人教外國人什麼是設計模式。

類比的方法實際上是發明或發現的常用方法。不知能否讓你感覺到其實外國的技術並不是那麼的神秘,也許我們從自身的文化當中挖掘出的東西太少了。

P.S. 更深一步的研究你可以參考 Doug Lea 的《Concurrent Programming in Java》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved