多線程主要考慮的是多個線程對共有資源的沖突?。。?/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ù)補充