中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才是重中之重~lock和monitor的區別

回到目錄

Monitor的介紹

1.Monitor.Enter(object)方法是(shi)獲取鎖(suo)(suo),Monitor.Exit(object)方法是(shi)釋(shi)放鎖(suo)(suo),這(zhe)就是(shi)Monitor最(zui)常(chang)用的(de)兩個方法,當然在使用過程(cheng)中為了避免獲取鎖(suo)(suo)之后因為異常(chang),致鎖(suo)(suo)無法釋(shi)放,所以需要在try{} catch(){}之后的(de)finally{}結構體中釋(shi)放鎖(suo)(suo)(Monitor.Exit())。

2.Monitor的常用屬性和方法(fa):

  1. Enter(Object) 在指定對象上獲取排他鎖。
  2. Exit(Object) 釋放指定對象上的排他鎖。
  3. IsEntered 確定當前線程是否保留指定對象鎖。
  4. Pulse 通知等待隊列中的線程鎖定對象狀態的更改。
  5. PulseAll 通知所有的等待線程對象狀態的更改。
  6. TryEnter(Object) 試圖獲取指定對象的排他鎖。
  7. TryEnter(Object, Boolean) 嘗試獲取指定對象上的排他鎖,并自動設置一個值,指示是否得到了該鎖。
  8. Wait(Object) 釋放對象上的鎖并阻止當前線程,直到它重新獲取該鎖。

Lock的介紹 

 1.Lock關鍵字實(shi)際上(shang)是一個語法糖,它將Monitor對(dui)(dui)(dui)象進(jin)(jin)行封裝,給object加上(shang)一個互(hu)斥鎖,A進(jin)(jin)程(cheng)進(jin)(jin)入此代(dai)碼段時,會給object對(dui)(dui)(dui)象加上(shang)互(hu)斥鎖,此時其(qi)他(ta)B進(jin)(jin)程(cheng)進(jin)(jin)入此代(dai)碼段時檢查object對(dui)(dui)(dui)象是否有鎖?如果(guo)有鎖則繼續等待A進(jin)(jin)程(cheng)運行完該代(dai)碼段并且解鎖object對(dui)(dui)(dui)象之后,B進(jin)(jin)程(cheng)才能夠(gou)獲取object對(dui)(dui)(dui)象為其(qi)加上(shang)鎖,訪問代(dai)碼段。

 2.Lock關鍵(jian)字封裝的Monitor對(dui)象結構(gou)如下:

            try
            {
                Monitor.Enter(obj);
                dosomething();
            }
            catch(Exception ex)
            {
                
            }
            finally
            {
                Monitor.Exit(obj);
            }

3. lock的(de)對(dui)象應(ying)該(gai)是私(si)有的(de)靜(jing)態對(dui)象

        private static object obj = new object();
        public void something()
        {
            lock (obj)
            {
                dosomething();
            }
        }

Monitor和Lock的區別

  1.Lock是Monitor的語(yu)法糖。

  2.Lock只(zhi)能針(zhen)對(dui)引用類型加(jia)鎖。

  3.Monitor能夠(gou)對值類(lei)型進行加鎖,實質上是Monitor.Enter(object)時對值類(lei)型裝箱。

感謝各位的閱讀!

回到目錄

posted @ 2018-05-18 12:20  張占嶺  閱讀(1268)  評論(1)    收藏  舉報