對class的同步注意事項

2021-09-02 03:01:36 字數 927 閱讀 5920

package web;

* synchronized鎖住了整個靜態類

* @author zengst

class aaa2

public static void getinstance() catch (interruptedexception e) catch (interruptedexception e) {

e.printstacktrace();

system.out.println(thread.currentthread().getname());

public class staticsharedtest {

public static void main(string args){

zengst2 z = new zengst2();

thread t1 = new thread(z);

thread t2 = new thread(z);

thread t3 = new thread(z);

t1.start();

t2.start();

t3.start();

class zengst2 implements runnable{

public void run() {

aaa2.getinstance();

執行結果:

thread-0getinstance

thread-1getinstance

thread-2getinstance

thread-0

thread-0

thread-2

thread-2

thread-1

-1thread-1

分析,這裡出現了-1.是沒有按照預期的。

原因是因為,三個執行緒都進入了a>0的判斷,雖然緊接著實現了對整個class的同步。

synchronized方法同步注意事項

1.只有同一例項的synchronized方法同一時間只能被乙個執行緒執行,不同例項的synchronized方法是可以併發的。例如,class a定義了synchronized方法sync 則不同例項a1.sync 和a2.sync 可以同時由兩個執行緒來執行。2.某個物件例項內,synchron...

iOS 標頭檔案匯入 class注意事項

ios 標頭檔案匯入 class注意事項 一,匯入標頭檔案有兩種不同的方法 使用引號或者使用尖括號,例如,import 和 import tire.h 帶尖括號的語句是用來匯入系統標頭檔案的,而帶引號的語句則說明匯入的是專案本地的標頭檔案,如果你看到的頭檔名是用尖括號括起來的,那 麼這個標頭檔案對你...

C 建構函式對this的注意事項

vs2019報錯錯誤 node node char c,int n,node left,node right this c c num n left left right right 正確 node node char c,int n,node left,node right c c num n l...