多執行緒同步 Monitor

2022-01-15 02:12:22 字數 2536 閱讀 8467

多執行緒一直在學習和理解中......

monitor類是多執行緒中用以實現同步的一種技術,主要是同一程序內多執行緒間的同步技術。

monitor類中有以下幾個方法需要注意:

monitor.enter(

object

obj)方法,其意義相當於lock(obj);

monitor.exit(

object

obj)方法,意思是釋放被鎖的物件

monitor.wait(

object

obj)方法,釋放被鎖的物件,並阻塞當前執行緒,等待其他執行緒通知(pulse)再次獲得鎖 (個人理解 當前執行緒 鎖 自己也阻塞了 要其他執行緒喚醒)

monitor.pulse(object obj)方法,通知等待加鎖obj的執行緒解除阻塞,obj物件狀態已經改變(個人理解 喚醒鎖住執行緒 這樣鎖住執行緒繼續執行 當前方法也繼續執行)

注意的是:這兩個方法是成對出現,通常使用在enter,exit之間。也可以用lock代替

**:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

namespace

}class

threddemo

public

void trone(object

thredname)

正在執行......i的值

", thredname.tostring(),i);

i++;

monitor.pulse(obj);

console.writeline("3

");//trone進入等待

monitor.wait(obj);

monitor.exit(obj);

console.writeline("4

");}

public

void trtwo(object

thredname)

正在執行......i的值

", thredname.tostring(), i);

//釋放 這樣console輸出的4一定在7的後面 因為trone阻塞需要trtwo釋放 當前前提是程式無bug

monitor.pulse(obj);-----標記console.writeline("7

");}}}

}

為了方便理解自己加入輸入檢視效果 .

結果:

如果我把 trtwo方法改下 

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

namespace

}class

threddemo

public

void trone(object

thredname)

正在執行......i的值

", thredname.tostring(),i);

i++;

monitor.pulse(obj);

console.writeline("3

");//trone進入等待 1分鐘後 注意的是

//如果指定的超時間隔已過,則執行緒進入就緒佇列。

monitor.wait(obj,60000

); monitor.exit(obj);

console.writeline("4

");}

public

void trtwo(object

thredname)

正在執行......i的值

", thredname.tostring(), i);

//釋放 這樣console輸出的4一定在7的後面 因為trone阻塞需要trtwo釋放 當前前提是程式無bug

console.writeline("7"

); }

console.writeline("8

");}}}

把monitor.pulse(obj);注釋掉了 trone方法 monitor.wait(obj,60000); 

執行後 4要等一分鐘才輸出 原因是 trtwo方法沒有釋放 。

個人學習檢視過程是 列印輸出順序檢視執行過程 這樣方便自己理解。

附加執行緒學習資料(來自 )

逆時針の風  

還有一線碼農相對 逆時針の風 通俗懂一點

以及 黑樹 

同步物件 Monitor

using system using system.threading public class cell catch synchronizationlockexception e catch threadinterruptedexception e console.writeline consum...

Java 多執行緒4 monitor機制

物件鎖 monitor 同步 塊 執行同步 塊後首先執行monitorenter指令,退出時執行monitorexit指令 使用內建鎖 synchronize 實現同步,關鍵在於要獲取指定物件monitor監視器,當執行緒獲取monitor後才繼續向下執行,否則就只能等待。這個過程是互斥的,每個時刻...

多執行緒同步

synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...