多執行緒同步基礎

2021-09-23 20:12:59 字數 2034 閱讀 5528

主線程執行完要等待其他執行緒執行完,才退出虛擬機器

實現方式和繼承方式的區別:

實現方式好處避免了但繼承的侷限性(不能繼承其他類,只能繼承thread類)

定義執行緒時,建議使用實現方式。

兩種方式區別:

繼承thread:執行緒**存放thread子類的run方法中

實現runnable:執行緒**存放介面子類的run方法中

同步的前提:

1,必須要有兩個或者兩個以上的執行緒。

2,必須是多個執行緒使用同乙個鎖(同乙個物件)。

必須保證同步中只能有乙個執行緒在執行。

如何判斷程式是否有安全問題:

1,明確哪些**是多執行緒執行**。

2,明確共享資料。

3,明確多執行緒執行**中哪些語句是操作共享資料的。

同步的兩種表現形式:同步**塊和同步函式

同步**塊

object obj = new object();

synchronized(obj)

同步函式(使用的鎖是this)

同步函式被靜態修飾後使用的鎖不再是this,因為靜態方法中不可以有this,

靜態的同步方法使用的鎖是該方法所在類的位元組碼檔案物件。 類名.class

public synchronized void add(int n)

public static synchronized void show()

同步**塊和同步函式要使用同一把鎖需要讓同步**塊的鎖設為this或者類名.class

多執行緒單例最好寫成餓漢式(函式裡面只有一句話)

class single

public static single getinstance()

}

懶漢式的延時載入多執行緒訪問時會出現安全問題,同步鎖是該類的位元組碼物件

class single

public static  single getinstance()

}return s;

}}

同步弊端死鎖-同步巢狀,鎖不一樣

/*

死鎖。同步中巢狀同步。

*/class ticket implements runnable}}

else

while(true)

show();

}public synchronized void show()//this

catch(exception e){}

system.out.println(thread.currentthread().getname()+"....code : "+ tick--);}}

}}class  deadlockdemo

catch(exception e){}

t.flag = false;

t2.start();

}}

class test implements runnable

public void run()}}

}else}}

}}

}class mylock

class  deadlocktest

}

本文出自 「點滴積累」 部落格,請務必保留此出處

多執行緒同步

synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...

多執行緒同步

同步 即限制某個資源在同一時間只能被同乙個執行緒訪問。執行緒安全問題 多個執行緒共同處理共享資源所導致的。解決 多執行緒處理乙個共享資源時,將處理共享資源的 利用關鍵字synchronized修飾。同步 塊 synchronized修飾 塊,synchronized lock 同步方法 synchr...

多執行緒同步

子執行緒迴圈10次,接著主線程迴圈100,接著又回到子執行緒迴圈10次,接著再回到主線程又迴圈100,如此迴圈50次,請寫出程式 package com.itcast public class traditionthreadcommuncation start 子執行緒 for int j 1 j ...