主線程執行完要等待其他執行緒執行完,才退出虛擬機器
實現方式和繼承方式的區別:
實現方式好處避免了但繼承的侷限性(不能繼承其他類,只能繼承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)
同步**塊和同步函式要使用同一把鎖需要讓同步**塊的鎖設為this或者類名.classpublic static synchronized void show()
多執行緒單例最好寫成餓漢式(函式裡面只有一句話)
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 ...