多執行緒一直在學習和理解中......
monitor類是多執行緒中用以實現同步的一種技術,主要是同一程序內多執行緒間的同步技術。注意的是:這兩個方法是成對出現,通常使用在enter,exit之間。也可以用lock代替monitor類中有以下幾個方法需要注意:
monitor.enter(
object
obj)方法,其意義相當於lock(obj);
monitor.exit(
object
obj)方法,意思是釋放被鎖的物件
monitor.wait(
object
obj)方法,釋放被鎖的物件,並阻塞當前執行緒,等待其他執行緒通知(pulse)再次獲得鎖 (個人理解 當前執行緒 鎖 自己也阻塞了 要其他執行緒喚醒)
monitor.pulse(object obj)方法,通知等待加鎖obj的執行緒解除阻塞,obj物件狀態已經改變(個人理解 喚醒鎖住執行緒 這樣鎖住執行緒繼續執行 當前方法也繼續執行)
**:
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把monitor.pulse(obj);注釋掉了 trone方法 monitor.wait(obj,60000);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
");}}}
執行後 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 靜態...