那麼,在static方法和非static方法前面加synchronized到底有什麼不同呢?
象),那麼static獲取到的鎖,就是當前呼叫這個方法的物件所屬的類(class,而不再是由這個class產生
的某個具體物件了)。而非static方法獲取到的鎖,就是當前呼叫這個方法的物件的鎖了。所以他們之間不
會產生互斥。
package com.jack.zhang.chapter9.classlock;
/** *
* @author ex-liuqi001
* */
public class test
} public synchronized void x() throws interruptedexception
} public static void main(string args) catch (interruptedexception e)
}}, "a");
thread thread1 = new thread(new runnable() catch (interruptedexception e)
}}, "b");
thread1.start();
thread.start();
}}
執行結果是:
staticx.......................
x.......................
x.......................
staticx.......................
staticx.......................
x.......................
x.......................
staticx.......................
x.......................
staticx.......................
staticx.......................
x.......................
x.......................
staticx.......................
x.......................
staticx.......................
x.......................
staticx.......................
x.......................
staticx.......................
那當我們想讓所有這個類下面的物件都同步的時候,也就是讓所有這個類下面的物件共用同一把鎖的時候,我們如何辦呢?
看**:
package com.jack.zhang.chapter9.classlock;
/** *
* @author ex-liuqi001
* */
public class test2
} }public void x() throws interruptedexception
} }public static void main(string args) catch (interruptedexception e)
}}, "a");
thread thread1 = new thread(new runnable() catch (interruptedexception e)
}}, "b");
thread1.start();
thread.start();
}}
執行結果:
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
staticx.......................
x.......................
x.......................
x.......................
x.......................
x.......................
x.......................
x.......................
x.......................
x.......................
x.......................
同步靜態方法與同步非靜態方法
可參考 同步方法 1 同步靜態方法 某個類object中的某個靜態方法staticmethod加上同步鎖之後,當某個執行緒thread呼叫staticmethod時該執行緒會獲取object類的鎖 當前object的鎖沒被其它執行緒獲取時,若當前object鎖被其它鎖獲取則會進行等待。此時其他任何執...
靜態與非靜態
一 靜態變數和例項變數的區別 1 靜態變數 由static修飾,在jvm中,靜態變數載入順序在物件之前,所以靜態變數不依賴物件的存在,可以不例項化物件的情況下使用類的靜態變數。通過上面的 可以看出,靜態變數可以在未例項化物件的時候使用,但是非靜態變數只能在例項化物件時候才能使用。執行結果為 30李四...
靜態與非靜態
什麼是靜態?被static修飾的為靜態,static可用來修飾變數 方法 內部類 塊。注意 1 static不能用來修飾外部類 介面 抽象類 抽象方法。2 介面中的變數可以不用明確的宣告為靜態的,但必須賦值,因為變數預設為public static final。3 介面中的方法不能被宣告為靜態的,介...