第三章執行緒間通訊

2021-08-20 10:40:42 字數 760 閱讀 6889

我看書是邊看邊記錄重點,所以可能內容會有些不通順,但是肯定是按照書中記錄的順序來進行記錄的。

首先介紹等待/通知機制。

第一種方式是使用sleep+while(true)這種方式來進行,但是因為while迴圈一直跑會非常浪費cpu資源,所以雖然可以實現等待/通知,但是這種方式不太好。

第二種方式就是wait/notify,wait方法在呼叫之前必須先獲取該物件的物件級別鎖,不然會丟擲乙個執行時異常,在呼叫了wait方法後,當前執行緒會釋放鎖。notify在呼叫前也必須先獲取該物件的物件級別鎖,否則也會丟擲乙個執行時異常,但是在執行完notify後,執行緒不會立即釋放鎖,而是會將程式執行完再釋放。當有多個wait執行緒時,notify只能隨機的喚醒其中乙個,多次執行可以喚醒多個,或者使用notifyall可以喚醒所有。

同步**塊會釋放鎖的幾種情況:

1、執行完同步**塊會釋放。

2、在同步**塊中遇到異常。

3、在同步**塊中執行了鎖所屬物件的wait方法。

wait(long)方法可以傳入乙個毫秒引數,意思是等待一段時間後,如果沒有執行緒喚醒這個執行緒,那麼它就會自動喚醒。

notify方法一旦先執行了,wait就無法被喚醒了。所以當我們需要使用wait/notify時一定要確保notify在wait後面執行,否則就會出現錯誤。確保notify在wait後面執行的方法,設定乙個boolean公共的引數,根據引數狀態來判斷它們的先後執行順序。

後面是各種生產者-消費者設計模式的使用方式,全部看完需要一定的時間去思考,所以先到這裡,後面看完理解了再來補充。

多執行緒程式設計第三章執行緒間的通訊

join 在指定執行緒結束之後再結束 join long 等待時間到,與sleep不一樣的是,join是wait join 實現 threadlocal 使用set object 和get 各個執行緒的值不一樣,因為實現裡會去當前執行緒 inheritablethreadlocal 是特殊的thre...

程序間通訊第三章(System V IPC)

1.概述 system v ipc的三種型別 system v訊息佇列 system v訊號量 system v共享記憶體區 2.key t鍵和ftok函式 三種型別的system v ipc使用key t鍵作為它們的名字,key t在標頭檔案定義,通常至少為32位整數值。函式ftok把乙個已存在的...

第三章執行緒間的通訊第一節

3.1.1不使用等待 通知機制實現執行緒間通訊 3.1.2什麼是等待 通知機制 兩個執行緒完全是主動式地讀取乙個變數,在花費讀取時間的基礎上,讀到的資料並不確定是否是想要的,因此需要 等待通知 機制 3.1.3等待 通知機制的實現 1wait 方法 作用是使當前執行 的執行緒進行等待,該方法是obj...