多線程

多線程主要考慮的是多個線程對共有資源的沖突?。。?/b>

多線程的不確定性!

一、基礎(chǔ)概念

實現(xiàn)多線程有兩種方式?實現(xiàn)Runnable接口、?繼承Thread (實際Thread也是實現(xiàn)Runnable接口) 重寫對應(yīng)的run()方法

調(diào)用start()方法是啟動線程 調(diào)用run()方法其實相當(dāng)只是調(diào)用了這個類的run(),并沒有開啟線程!

二、synchronized(互斥鎖,共用資源線程串行依次執(zhí)行)

1、在方法上加上synchronized,那么對于同一實例,會依次等待,但對于不同實例來說沒效果?。▓?zhí)行完畢或拋出異常則釋放鎖)

2、鎖的粒度要盡量小

3、經(jīng)典的單例模式(懶漢中不建議使用直接在genInstance()方法上加鎖,雖然能達到效果,但效率低)

經(jīng)典 double check

三、interrupt 中斷:將在blocked或wait pool中的線程結(jié)束阻塞狀態(tài),重新回到runnable就緒狀態(tài)/lock pool(ps,執(zhí)行interrupt后并不是立刻將該進程回到runnable,有調(diào)度時間差!??! 多線程調(diào)度都有時間差)


interrupt

四、join


在thread1中調(diào)用thread2().join


五、wait?

調(diào)用wait(),進入等待池(特殊的阻塞),只有獲得鎖的線程才可以獲取執(zhí)行資源

wait和notify必須在synchronized方法或塊中

sleep()方法會釋放CPU,但不釋放鎖!

自私線程:在run中設(shè)置了大循環(huán)的線程

禮貌線程:在run中主動調(diào)用yield()方法

六、J.U.C

后續(xù)補充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容