執行緒通訊 生產者 消費者模式

2022-08-18 15:33:13 字數 1866 閱讀 6142

---恢復內容開始---

執行緒是作業系統中獨立的個體,但這些個體之間如果沒有特殊的處理就不能成為乙個整體。而執行緒間的通訊機制就是成為整體的必用方案。執行緒間的通訊會使系統的互動性更強,在提高cpu利用率的同時還會使程式設計師對各執行緒任務在處理的過程中進行有效的把控和監督。

等待/通知機制

執行緒之間不是獨立的個體,而是通過等待和通知機制進行相互通訊和協作。

等待/通知機制可以與生活中就餐時的場景類似。廚師和服務員之間的互動在「菜品傳遞臺」上,過程如下:

廚師在做完一道菜的時間不定,所以廚師將完成的菜放到「菜品傳遞臺」的時間也不定。

服務員在廚師將完成的菜放到「菜品傳遞臺」之前處於「等待(wait)」狀態。

服務員怎樣取到菜?當廚師將完成的菜放到「菜品傳遞臺」上,這相當於一種「通知(notify)」,這時服務員拿到菜交給就餐者。

在這個過程中,出現的就是「等待/通知」機制。

等待/通知的實現

wait,notify,notifyall都是object中的方法。

方法wait的作用:

使當前執行緒進行等待,wait方法將當前執行緒置於「預執行佇列」中,並在wait所在**行處停止執行,直到接到通知或被中斷為止。

在呼叫wait之前,執行緒必須獲取該物件的物件級別鎖,即只能在同步方法或同步語句塊中呼叫wait方法。如果呼叫wait方法時,沒有持有適當的鎖,則丟擲illegalmonitorstateexception,它是runtimeexception的乙個子類,不需try/catch捕獲。

執行wait方法後,釋放物件級別鎖,不同於sleep,sleep不釋放鎖。

在wait方法返回前,執行緒與其他執行緒競爭得到鎖。

方法notify的作用:

在呼叫notify之前,執行緒必須獲取該物件的物件級別鎖,即只能在同步方法或同步語句塊中呼叫notify方法。如果呼叫notify方法時,沒有持有適當的鎖,則丟擲illegalmonitorstateexception,它是runtimeexception的乙個子類,不需try/catch捕獲。同wait方法

該方法用來通知那些可能等待的該物件的物件鎖的其他執行緒。如果有多個執行緒等待,則由執行緒規劃器隨機挑選乙個成wait狀態的執行緒,對其通知喚醒。模擬reentrantlock,可以用condition物件通知喚醒制定執行緒。

notify在通知後,不會立即釋放物件鎖,外套也不能馬上獲取物件鎖,要等待notify所在的同步方法或同步**塊執行完畢,(退出synchronized**塊後)釋放鎖。由於notify喚醒了處於wait狀態的執行緒,使其進入就緒狀態。被重新喚醒的執行緒會試圖重新獲取臨界區的許可權,也就是鎖,並繼續執行臨界區內wait之後的**,執行完畢後,釋放鎖。此時如果「預執行佇列」中還有其他wait執行緒,則需要再次使用notify語句,否則wait狀態的執行緒由於沒有得到該物件的通知,仍舊阻塞在wait狀態,知道該物件發出notify或notifyall通知。

簡而言之,wait方法可以使呼叫該方法的執行緒釋放共享資源的鎖,然後從執行狀態退出,進入等待序列,直到被喚醒。wait(long)等待一段時間內是否有執行緒對鎖進行喚醒,如果超過這個時間自動喚醒。notify方法可以隨機喚醒等待序列中等待同一共享資源的「乙個」執行緒,使該執行緒退出等待序列,進入可執行狀態,僅通知乙個執行緒。notifyall方法可以隨機喚醒等待序列中等待同一共享資源的「全部」線退出等待序列,進入可執行狀態,優先順序高的最先執行或隨機選擇執行由jvm決定。

每個鎖物件有兩個佇列,乙個是就緒佇列,乙個是阻塞佇列。乙個執行緒被喚醒後進入緒佇列,等待cpu排程。乙個執行緒被wait後,進入阻塞佇列,等待下一次喚醒。

等待/通知機制實現案例:生產者/消費者模式

---恢復內容結束---

執行緒通訊問題 生產者 消費者模式

解決執行緒之間通訊問題的方法 解決方法1 併發協作模型 生產者 消費者模式 管程法 測試 生產者 消費者模式 利用緩衝區解決 管程法 生產者 消費者 產品 緩衝區 public class testpc 生產者 class producftor extends thread 生產 override ...

執行緒 執行緒間通訊(生產者消費者模式)

注意 1.執行緒間的通訊,共享的資料一定要有同步 塊synchronized 2.一定要有wait和notify,而且二者一定是成對出現 3.生產者和消費者的執行緒實現一定是在while true 裡面public class basket public void setempty boolean ...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...