在靜態方法和非靜態方法上加 Synchronized的區別
阿新 • • 發佈:2020-12-31
在靜態方法和非靜態方法上加 Synchronized的區別
非靜態方法
class Test{
public synchronized void test() {
}
}
等價於
class Test{
public void test() {
synchronized(this) {
}
}
}
非靜態方法:給物件加鎖,這時候,在其他一個以上執行緒中執行該物件的這個同步方法(注意:是該物件)就會產生互斥
在靜態方法
class Test{ public synchronized static void test() { } } 等價於 class Test{ public static void test() { synchronized(Test.class) { } } }
靜態方法: 相當於在類上加鎖, 這時候,只要是這個類產生的物件,在呼叫這個靜態方法時都會產生互斥