多執行緒學習筆記(二)

2022-03-15 05:27:40 字數 1030 閱讀 8163

上一節講到lock鎖,還有一種鎖就是monitor(監視器)

區別lock鎖對鎖定的物件一直要等當前程序全部處理完才能讓其他程序進入。

monitor鎖可以程式控制解鎖,只是在程序進行某一部分運算時進行上鎖,等執行結束時可以解鎖供其他程序進行運算

注:錯誤「

從不同步的**塊中呼叫了物件同步方法」

原因一:monitor鎖住的是值型別的變數,在monitor.enter(int i)是對i進行了一次裝箱的過程,而後在monitor.exit(int i)中又進行了一次裝箱,系統會認為兩次的鎖不是同乙個

原因二:monitor在**中已經釋放,沒有重新申請鎖,而後又呼叫了monitor.exit()的方法

摘自msdn:使用monitor鎖定物件(即引用型別)而不是值型別。將值型別變數傳遞給enter時,它被裝箱為物件。如果再次將相同的變數傳遞給enter,則它被裝箱為乙個單獨物件,而且執行緒不會阻止。monitor本應保護的**未受保護。此外,將變數傳遞給exit時,也建立了另乙個單獨物件。因為傳遞給exit的物件和傳遞給enter的物件不同,monitor將引發 synchronizationlockexception

當乙個執行緒建立完畢就處於就緒狀態等待cpu排程,

enter(),pause(),pauseall(),wait()三個方法

乙個程序檢視呼叫乙個物件,嘗試給其加上鎖,發現無法加鎖,會進入就緒狀態

enter()是對乙個物件進行加鎖

wait()是執行緒釋放物件鎖,並進入等待態,也不會通知等待態中的執行緒進入就緒態

pause和pauseall是通知等待態的執行緒進入就緒態,pause只通知等待態中的第一條執行緒。

多執行緒學習筆記二

傳統執行緒 time 下午06 15 19 author retacn yue email zhenhuayue sina.com public class traditionalthread catch interruptedexception e system.out.println threa...

C 多執行緒 學習筆記(二)

程序 基於程序的多工處理是程式的併發執行。執行緒 基於執行緒的多工處理是同一程式的片段的併發執行。c 多執行緒寫法,從入門開始,一點點往下寫,我也不知道能學到精通還是到放棄。根據主流的一些部落格技術文件,循序漸進,適於新手入門。首先第乙個程式是直接使用多執行緒建立函式建立多個執行緒。編譯的時候需要靜...

java多執行緒學習筆記(二)

8 執行緒的狀態 初始狀態 使用new關鍵字建立乙個執行緒,則執行緒就處理初始狀態。就緒狀態 建立執行緒後,需要我們手動呼叫start方法,來開啟執行緒,start方法會新建乙個執行緒並讓這個執行緒執行run方法。有的同學可能不理解,為什麼不直接呼叫run方法,請記住呼叫run來開啟新執行緒,它只會...