線程安全的實現方式以及鎖優化。

線程安全的實現方式:
1.互斥同步。臨界區、信號量、互斥量都是互斥同步的手段。
2.非阻塞同步。cas結合不斷重試
3.無鎖:沒有共享數據的時候。
鎖優化:
1.鎖自旋和自適應自旋:在等待鎖的時候不去掛起線程,而是執行一個忙循環,缺點是消耗處理器資源。
2.鎖消除。
3.鎖粗化(自動擴大使用鎖的範圍)
4.輕量級鎖:在進入同步代碼塊的時候,如果此同步對象沒有被鎖定,虛擬機首先在當前線程的棧幀中創建
一個名爲鎖記錄的空間。用於存儲當前對象mark word 的拷貝,,然後虛擬機使用cas操作嘗試將對象的mark
word 更新爲指向棧幀中鎖記錄的指針。如果更新成功,這個線程就擁有了該對象的鎖。處於輕量級鎖定狀態。
如果更新失敗,虛擬機首先檢查對象的mark word 是否指向當前線程的棧幀,如果是說明當前線程已經擁有了
該對象的鎖,如果不是說明這個對象已經被其他線程佔用了。如果兩個以上的線程爭用同一個鎖,輕量級鎖就不
再有效 。
5.偏向鎖:當鎖對象第一次被線程獲取的時候,虛擬機把對象的的標誌位設置成偏向模式。同時使用cas操作把獲取
到的鎖的線程id記錄到對象的mark word 中,如果cas成功,持有偏向鎖的線程以後每次進入這個鎖的同步塊時,
虛擬機都不會再進行任何同步操作。當另一個線程去嘗試獲得鎖時,偏向模式及宣告失敗。偏向鎖可以提高有同步
但是無競爭的程序性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章