如果一個對象有多個方法加了 synchronized,那么該對象有幾把鎖?


答案是一把鎖 🔐

代碼示例:

public class Test {

    public synchronized void method1(){
        // do something
    }

    public synchronized void method2(){
        // do something
    }

}

對象鎖是在一個類的對象上加的的鎖,只有一把,不管有幾個方法進行了同步。

這些同步方法都共有一把鎖,只要一個線程獲得了這個對象鎖,其他的線程就不能訪問該對象的任何一個同步方法。

對象鎖:

synchronized 修飾實體里的非靜態變量,鎖的是對象

synchronized 修飾代碼塊,鎖的是對象

synchronized 修飾非靜態方法,鎖的是對象

使用對象鎖的情況,只有使用同一對象的線程才會受鎖的影響,多個對象調用同一方法也不會受影響。

類鎖:

synchronized 修飾類中的靜態變量

synchronized 修飾靜態方法

synchronized 修飾類.class

類鎖是所有線程共享的鎖,所以同一時刻,只能有一個線程使用加了鎖的方法或方法體,不管是不是同一個實例。

參考文章:

https://blog.csdn.net/qa275267067/article/details/79804713

https://www.cnblogs.com/fengzheng/p/12066239.html

本文由博客一文多發平台 OpenWrite 發布!
個人公眾號《駭客與畫家》,歡迎關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM