答案是一把鎖 🔐
代碼示例:
public class Test {
public synchronized void method1(){
// do something
}
public synchronized void method2(){
// do something
}
}
對象鎖是在一個類的對象上加的的鎖,只有一把,不管有幾個方法進行了同步。
這些同步方法都共有一把鎖,只要一個線程獲得了這個對象鎖,其他的線程就不能訪問該對象的任何一個同步方法。
對象鎖:
synchronized 修飾實體里的非靜態變量,鎖的是對象
synchronized 修飾代碼塊,鎖的是對象
synchronized 修飾非靜態方法,鎖的是對象
使用對象鎖的情況,只有使用同一對象的線程才會受鎖的影響,多個對象調用同一方法也不會受影響。
類鎖:
synchronized 修飾類中的靜態變量
synchronized 修飾靜態方法
synchronized 修飾類.class
類鎖是所有線程共享的鎖,所以同一時刻,只能有一個線程使用加了鎖的方法或方法體,不管是不是同一個實例。
參考文章:
本文由博客一文多發平台 OpenWrite 發布!
個人公眾號《駭客與畫家》,歡迎關注