基礎複習3-執行緒
執行緒
一、建立執行緒方法1:1、繼承Thread類
2、重寫run()方法
3、呼叫start()方法
建立執行緒方法2: 1、實現Runnable類
2、實現run()方法
3、建立Thread()
4、呼叫start()方法
二、執行緒狀態(五種):執行緒呼叫start()啟動後變成就緒狀態,CPU分配,執行緒得到執行機會則呼叫run方法變成執行狀態,當CPU把執行機會給其他執行緒時,當前執行緒則變成阻塞狀態------單執行緒應用,同一時間CPU將時間片只給一個執行緒執行
--新建(New),呼叫start()
->就緒(Runnable)
->執行(Running)
->阻塞(Blocked),
死亡(Dead),run()方法執行完畢
三、常用方法:
Thread.activeCount():當前啟動執行緒數
Thread.currentThread():獲取當前正在執行執行緒
getId():獲取執行緒唯一標識
getName():獲取執行緒名字
setPriority():設定優先順序1-10
getPriority():獲得優先順序
四、終止執行緒:
stop() 不推薦,可能造成記憶體洩漏。如果程式中有資源需要回收時,在回收之前呼叫過stop()方法則會導致程式毫無徵兆的停止從而來不及回收相關的資源,導致程式可能會丟擲安全異常
interrupt(),可能報異常,如果呼叫了sleep方法,會報異常,休眠被打斷
正常中斷方式:先判斷isInterrupter是否是中斷狀態,然後呼叫interrupt()
通過標記結束(推薦結束方式)
五、守護執行緒,也稱之為後臺執行緒,主要為其他執行緒提供支援的後臺型程序,如jvm中的GC,守護執行緒隨著主線的結束而結束
setDaemon(true):設定當前執行緒為守護執行緒
六、Join執行緒:讓Join執行緒執行完再執行其他執行緒
join()
七、死鎖
同步塊中出現死迴圈也可能會造成死鎖,另一執行緒一直等待當前資源
多個執行緒在等待被對方執行緒佔有的資源釋放時處於一種死鎖狀態
八、wait()和sleep()的區別:wait方法是Object類中用於讓當前執行緒物件處於等待狀態的方法,wait方法不會主動喚醒休眠中的執行緒,除非其他物件呼叫notify或notifyAll方法時,此時被休眠的執行緒才會被喚醒,wait方法在使用時,當前執行緒必須持有當前物件監視器(結合synchronized使用),否則會丟擲illegalMonitorStateException
Sleep是來自Thread類中的,能夠將當前執行緒處於一定時間休眠狀態,當時間達到後,執行緒會自動喚醒,sleep方法不需要執行緒物件持有當前的物件監視器