synchronized object & synchronized method

多線程需要一定的“計算機”式的思維!

synchronized method 情況下,當有任何線程調用這個 method 時,其他線程都無法訪問這個實例(instance)中所有聲明爲 synchronized 的 method。

而 synchronized object 就靈活很多,因爲它只限制了 synchronized(object){ ... } 中的這部分代碼只能由一個線程訪問。也就是說盡管有兩個線程訪問同一個實例 (instance),下面的代碼依然可以保證正常工作:


public class ThreadSafe{

  public void method1(){
    synchorinzed(object1){
      .....
    }
  }

  public void method2(){
    synchronized(object2){
      .....
    }
  }
}


當有兩個線程同時分別訪問 method1 和 method2,兩個線程都不會被阻塞,效率就比使用 synchronized method 高多了。
但如果有兩個線程想同時訪問 method2,則同一時間只能有一個線程使用 synchronized(object2){ ... } 裏的代碼。

有一點千萬要記住,synchronized object 與 synchronized method 這兩種方法是針對同一個實例(instance),而不是類!!這點一定要搞清楚!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章