玩轉java多執行緒 之多執行緒基礎 執行緒同步機制

2020-10-08 12:00:52

執行緒同步就是針對:多個執行緒操作同一個資源
並行:同一個物件被多個執行緒同時操作

處理多執行緒問題時,多個執行緒存取同一個物件,並且某些執行緒還想修改這個物件,這時需要執行緒同步,執行緒同步其實就是一種等待機制,多個需要同時存取此物件的執行緒進入這個物件的等待池,等待前面的執行緒使用完畢,下一個執行緒繼續使用

通常用佇列和鎖來解決執行緒同步
很通俗的例子,就是上廁所排隊,然後廁所門上上鎖,
狂神真是人才,想出這麼有趣的例子

每個物件都有一把鎖,佇列和鎖可以保證執行緒的安全性

為了保證資料在方法之中被存取時的正確性,在存取時加入鎖機制(synchronized),當一個執行緒獲得物件的排它鎖,獨佔資源,其他執行緒必須等待,使用後釋放鎖即可,可能存在的問題是:

第一:一個執行緒持有鎖會導致其他所有需要此鎖的執行緒掛起
第二:在多執行緒競爭下,加鎖,釋放鎖會導致比較多的上下文切換和排程時延,引起效能問題
第三:如果一個優先順序高的執行緒等待一個優先順序低的執行緒釋放鎖,會導致優先順序倒置,引起效能問題

好了,今天先到這裡,狂神真的很有趣,歡迎大家看他的視訊~