1. 程式人生 > 其它 >在靜態方法和非靜態方法上加 Synchronized的區別

在靜態方法和非靜態方法上加 Synchronized的區別

技術標籤:java多執行緒設計模式jquery面試

在靜態方法和非靜態方法上加 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) {
    }
    }
}
靜態方法: 相當於在類上加鎖, 這時候,只要是這個類產生的物件,在呼叫這個靜態方法時都會產生互斥