1. 程式人生 > >java synchronized 關鍵字(1)物件監視器為Object

java synchronized 關鍵字(1)物件監視器為Object

在java多執行緒中 synchronized 是非常重要的,也是經常用到的

對於synchronized關鍵字要注意兩點

synchronized物件監視器為Object的時候
synchronized物件監視器為Class的時候

物件監視器為Object

也就是synchronized鎖定的是物件

例如下面程式碼

public class A {

    synchronized public void MethodA(){
        System.out.println("this is MethodA");
    }
    synchronized public
void MethodB(){ System.out.println("this is MethodB"); } public void MethodC(){ System.out.println("this is MethodC"); } }

建立物件 a 和b

A a = new  A();
A b = new A();

當兩個執行緒分別呼叫 a.MethodA() 和 a.MethodB() 的時候 這兩個方法是不能同時執行的,因為synchronized 鎖的是a 這個物件,a 裡面被synchronized 關鍵字標記的方法只能序列,也就是同一時間只有一個synchronized 標記的方法能執行。a.MethodA() 執行 b.MethodB()就要等待,
但a.MethodC()可以執行,因為MethodC沒有被標記,屬於非現成安全。不受關鍵字影響。

a.MethodA()和b.MethodA() 可以同時執行,因為synchronized鎖的是物件,a和b屬於兩個物件,所以有兩把鎖分別鎖a和b,但相互之間不受影響。