自旋鎖(spinLock)

1.AtomicReference

        AtomicReference類提供了一個可以原子讀寫的對象引用變量。原子意味着嘗試更改AtomicReference的多個線程(例如:比較和交換操作),不會是AtomicReference最終達到不一致的效果。
        AtomicReference有一個先進的方法compareAndSet(),它可以將引用和預期值(引用)進行比較,如果它們值相等,則在AtomicReference對象內設置一個新的引用。

2.概述

        自旋鎖(spinlock):是指當一個線程在獲取鎖的時候,如果鎖已經被其他線程獲取,那麼該線程將循環等待,然後不斷地判斷鎖是否能夠被成功獲取,直到獲取到鎖纔會推出循環。
        獲取鎖的線程一直處於活躍狀態,但是並沒有執行任何有效的任務,使用這種鎖會造成busy-waiting。

3.自選鎖存在的問題

        1.如果某個線程持有鎖的時間過長,就會導致其他等待獲取鎖的線程進入循環等待,消耗CPU。使用不當會造成CPU使用率極高。
        2.上面Java實現的自旋鎖是不公平的,即無法滿足等待時間最長的線程有限獲取鎖。不公平的鎖會存在“線程飢餓”問題。

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