線程
為提高cpu的利用率以及解決實時性問題,多線程油然而生抒和。‘
線程中優(yōu)先級高不代表一定能先執(zhí)行
實現(xiàn)多線程有兩種方式:
1.繼承Thread類
2.實現(xiàn)Runnable接口
繼承Therad的線程類不能繼承其他類管怠;通過static修飾也可共享資源,但不能滿足大量數(shù)據(jù)的需求
實現(xiàn)Runnable接口的實現(xiàn)類還可以繼承其他類遏插,可讓多個線程共享實現(xiàn)類的資源
多線程通過搶占cpu來提供利用率以及解決實時性問題,也因此導(dǎo)致線程的運(yùn)行軌跡不確定
多線程的某個線程運(yùn)行可能會在任意位置因為cpu時間片結(jié)束而導(dǎo)致被切換出去纠修,當(dāng)再次搶占cpu也會在切換位置繼續(xù)執(zhí)行下去
多線程的線程是獨立運(yùn)行涩堤,互不干擾,可共享資源分瘾,但是很容易導(dǎo)致數(shù)據(jù)錯亂(線程安全問題)
解決線程的安全問題也是線程同步的實現(xiàn)胎围,有兩種方式:
1.同步代碼塊
2.同步方法
線程的生命周期
新生狀態(tài):使用new關(guān)鍵字建立一個線程后,該線程對象就處于新生狀態(tài)德召,調(diào)用start()方法可進(jìn)入就緒狀態(tài)
就緒狀態(tài):具備運(yùn)行條件白魂,等待cpu的調(diào)度
運(yùn)行狀態(tài):執(zhí)行該線程的run方法中代碼,直到因某原因阻塞進(jìn)入阻塞狀態(tài)? 或者正常完成任務(wù)而進(jìn)入死亡狀態(tài)
阻塞狀態(tài):阻塞狀態(tài)下的線程不能進(jìn)入就緒狀態(tài)上岗,只有當(dāng)因某原因而進(jìn)入阻塞狀態(tài)的原因消除時福荸,才可進(jìn)入就緒狀態(tài)。
死亡狀態(tài):正常完成任務(wù)肴掷、線程被強(qiáng)制性終止或是線程拋出未捕獲的異常
同步代碼塊
synchronized?(mutex) {
??// .. .
}
mutex 稱為互斥鎖/同步鎖敬锐。對共享資源進(jìn)行加鎖實現(xiàn)同步。一般用共享資源作為同步鎖呆瞻,也稱同步監(jiān)視器台夺。
同步代碼塊中同步監(jiān)視器(mutex) 可以是任何對象
同步方法
private synchronized void xxx() {
? ? // .. .
??????????? }
把普通方法用synchronized 修飾,同步方法的同步監(jiān)視器是this痴脾。