并發:用同一個物件多個執行緒同時操作
1.執行緒并發非同步



2.執行緒并發同步
同一個資源多人使用會發生并發問題
處理多執行緒問題時,多個執行緒訪問同一個物件,并且某些執行緒還想修改這個物件,這時候我們就需要”執行緒同步“,
執行緒同步其實就是一種等待機制,多個需要同時訪問此物件的執行緒進入這個物件的等待池形成佇列,
等待前面的執行緒使用完畢后,下一個執行緒再使用
執行緒同步的兩個條件:
1.形成佇列
2.加入鎖機制
3.鎖機制
由于同一行程的多個執行緒共享同一塊存盤空間,在帶來方便的同時也帶來了訪問沖突的問題,
為了保證資料在方法中被訪問時的正確性,在訪問時加入了鎖機制(synchronized),當一個執行緒獲得物件的排他鎖
獨占資源,其他執行緒必須等待,使用后釋放鎖即可,
注:
1.一個執行緒持有鎖會導致其他所有需要此鎖的執行緒掛起
2.在多執行緒競爭下,加鎖,釋放鎖會導致比較多的背景關系切換和調度延時,引起性能問題
3.如果一個優先級高的執行緒等待一個優先級低的執行緒釋放鎖會導致優先級倒置,引起性能問題
4.鎖機制鎖的是物件是資源
由于我們可以通過private關鍵字來保證資料物件只能被方法訪問,所以我們只需要針對方法提出一套機制,這套機制就是synchronized關鍵字,
包括兩種用法:synchronized方法和synchronized塊,
同步方法:public synchronized void metho(int args){}
synchronized方法控制對”成員變數|類變數“物件的訪問:每個物件對應一個鎖,每個synchronized方法都必須獲得呼叫該方法
的物件的鎖方能執行,否則所屬執行緒阻塞,方法一旦執行,就獨占該鎖,直到從該方法回傳時才將鎖釋放,
此后被阻塞的執行緒方能獲得該鎖,重新進入可執行狀態,
注:
若將一個大的方法宣告為synchronized將會大大影響效率
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/141134.html
標籤:Java
上一篇:CAS底層原理與ABA問題
