執行緒靜態同步與非靜態差別

2021-06-28 02:27:43 字數 2711 閱讀 6265

那麼,在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 介面中的方法不能被宣告為靜態的,介...