執行緒安全的實現方式:
1.互斥同步。臨界區、訊號量、互斥量都是互斥同步的手段。
2.非阻塞同步。cas結合不斷重試
3.無鎖:沒有共享資料的時候。
鎖優化:
1.鎖自旋和自適應自旋:在等待鎖的時候不去掛起執行緒,而是執行乙個忙迴圈,缺點是消耗處理器資源。
2.鎖消除。
3.鎖粗化(自動擴大使用鎖的範圍)
4.輕量級鎖:在進入同步**塊的時候,如果此同步物件沒有被鎖定,虛擬機器首先在當前執行緒的棧幀中建立
乙個名為鎖記錄的空間。用於儲存當前物件mark word 的拷貝,,然後虛擬機器使用cas操作嘗試將物件的mark
word 更新為指向棧幀中鎖記錄的指標。如果更新成功,這個執行緒就擁有了該物件的鎖。處於輕量級鎖定狀態。
如果更新失敗,虛擬機器首先檢查物件的mark word 是否指向當前執行緒的棧幀,如果是說明當前執行緒已經擁有了
該物件的鎖,如果不是說明這個物件已經被其他執行緒占用了。如果兩個以上的執行緒爭用同乙個鎖,輕量級鎖就不
再有效 。
5.偏向鎖:當鎖物件第一次被執行緒獲取的時候,虛擬機器把物件的的標誌位設定成偏向模式。同時使用cas操作把獲取
到的鎖的執行緒id記錄到物件的mark word 中,如果cas成功,持有偏向鎖的執行緒以後每次進入這個鎖的同步塊時,
虛擬機器都不會再進行任何同步操作。當另乙個執行緒去嘗試獲得鎖時,偏向模式及宣告失敗。偏向鎖可以提高有同步
但是無競爭的程式效能。
執行緒安全以及鎖
在cs架構中專案中,執行緒的使用就成了無可避免的。在使用執行緒時,執行緒安全如何處理,以及如何避免死鎖?要解決這些問題,那麼我們需要了解,什麼是執行緒安全,什麼是死鎖?什麼是執行緒安全?執行緒安全問題其實是指多個執行緒對於某個共享資源的訪問導致的原子性 可見性和有序性問的問題,而這些問題會導致共享資...
執行緒安全與鎖優化
樂觀鎖 cas aba 版本號 atomicstampedreference 時間戳atomicmarkablereference boolean 可重入 絕對執行緒安全,不依賴共享資料 使用引數,區域性變數 自旋鎖 認為鎖很快釋放,占用cpu迴圈獲取鎖,超過一定次數 時間 再掛起執行緒,自旋次數上...
讀寫鎖以及執行緒安全的集合
讀寫鎖實現 讀寫鎖實現執行緒安全的list 讀寫鎖實現 class mylist extends arraylist finally override public object get int index finally override public boolean add object e f...