synchronized的用法

這兩天補了下多線程的東西,看了看書,看了看大牛們寫的,有了寫粗淺的理解,現(xiàn)在自己總結(jié)下

synchronized有兩種用法,同步方法和同步代碼塊

總結(jié)如下:
1、當(dāng)一個線程通過A對象訪問一個非靜態(tài)的同步方法(或同步代碼塊)時,其他線程通過A對象訪問非靜態(tài)同步方法(或同步代碼塊)的操作都會被鎖定。但是其他線程通過A對象訪問非靜態(tài)非同步方法的操作不會被鎖定,而且通過B對象訪問非靜態(tài)同步方法的操作也不會被鎖。(因為各個對象的鎖是獨立的所以叫做對象鎖)
2、當(dāng)一個線程訪問靜態(tài)同步方法或者由類鎖修飾的同步代碼塊時,所有該類的靜態(tài)方法或者被同一個類鎖修飾的同步代碼塊都會被鎖定,其他線程無法訪問。
3、類鎖和對象鎖互不影響。
4、修飾方法和修飾代碼塊在本質(zhì)上是一樣的,區(qū)別只在于修飾代碼塊的方式在競爭激烈的情況下更加高效。
5、注意區(qū)別以下代碼的對象鎖的持有情況

public class Human {
    //XiaoMing.eatDinner();
    public synchronized void eatDinner() {   //這里的鎖是XiaoMing
        pickupByLeftHand();
        eatFoodByMouth();
    };
    
    //XiaoMing.eatDinner2();
    public void eatDinner() {
        synchronized(this) {    //這里的鎖是XiaoMing
            pickupByLeftHand();
            eatFoodByMouth();
        }
    };
    
    //XiaoMing.drinkWater();
    public void drinkWater() {
        pickupByRightHand();
        synchronized (mouth) {  //這里的鎖是mouth
            drinkWaterByMouth();
        }
    }
}

參考資料:https://blog.csdn.net/luoweifu/article/details/46613015
https://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html
http://www.itdecent.cn/p/9abdf1de5d40

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • synchronized是Java中的關(guān)鍵字,是一種同步鎖。它修飾的對象有以下幾種: 修飾一個代碼塊,被修飾的代碼...
    明教de教主閱讀 710評論 0 2
  • synchronized是Java中的關(guān)鍵字,是一種同步鎖。它修飾的對象有以下幾種: 修飾一個代碼塊,被修飾的代碼...
    4e70992f13e7閱讀 588評論 0 9
  • 簡介synchronized是Java中的的關(guān)鍵字,是一種同步鎖,可以修飾以下幾種1.1>:類作用的范圍是:syn...
    世道無情閱讀 4,149評論 0 3
  • 以前的工作過程中,偶爾會遇到synchronized的使用,比如這篇總結(jié)。今天來總結(jié)一下自己對synchroniz...
    德彪閱讀 1,012評論 0 0
  • 進程和線程 進程 所有運行中的任務(wù)通常對應(yīng)一個進程,當(dāng)一個程序進入內(nèi)存運行時,即變成一個進程.進程是處于運行過程中...
    勝浩_ae28閱讀 5,256評論 0 23

友情鏈接更多精彩內(nèi)容