乙個程式裡的執行緒數,就像一家公司裡的員工數一樣,太少了忙不過來,太多了入不敷出。因此我們需要有更好的機制來協調它們。
拓展:最理想的情況是:讓程序有一些初始數目的執行緒(所謂的執行緒池),當沒有任務的時候這些執行緒自動進入睡眠,有了任務他們會立即執行任務,不斷迴圈。程序還應該可以根據自身任務的繁重與否來增刪執行緒的數目,當所有的任務都完成了之後,所有的執行緒還能妥當地收官走人,不帶走一片雲彩。
下圖是乙個處於初始狀態的執行緒池:
有這麼幾點:
1,任務佇列中剛開始沒有任何任務,是乙個具有頭結點的空鏈佇列。
2,使用互斥鎖來保護這個佇列。
3,使用條件變數來代表任務佇列中的任務個數的變化——將來如果主線程往佇列中投放任務,那麼可以通過條件變數來喚醒那些睡著了的執行緒。
4,通過乙個公共開關——shutdown,來控制線程退出,進而銷毀整個執行緒池。
你如果有更好的idea,可以擴充套件該設計,但就目前而言,乙個相互協作的多執行緒組織已經初具雛形。
多執行緒 22 併發協作
生產者消費者模式 我們都在肯德基裡面吃過東西,kfc一般都很忙,別問我是怎麼知道的,我以前可是kfc優秀員工,他們先把漢堡 薯條 雞翅什麼都準備好放在乙個架子上,然後顧客過來買東西,前台員工只需要把顧客點的東西裝起來拿給顧客就好了。那個架子就是圖上的庫。這樣就可以實現解耦,我生產我的東西,你買你的東...
多執行緒 23 併發協作 管程法
併發協作模型生產者消費者模式的第一種管程法,它的核心要點是加了緩衝區,有了緩衝區之後,生產者和消費者之間解耦了,比如超市的中間商,生產者向中間商發商品,超市向中間商進商品,而生產者並不知道商品買給誰了。分析這個模型有幾個角色 第乙個角色生產者,第二個角色消費者,它們兩個是多執行緒,第三個是併發容器也...
多執行緒併發
多執行緒併發主要有3個方面 1 同步器 主要有synchronized,reentrantlock 訊號量,門栓 countdownlatch 障柵 cyclicbarrier 交換器。2 同步容器 主要包括 對映 集 佇列 對映 concurrenthashmap,concurrentskipli...