自旋鎖(spinLock)

1.AtomicReference

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

2.概述

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

3.自選鎖存在的問題

        1.若是某個線程持有鎖的時間過長,就會致使其餘等待獲取鎖的線程進入循環等待,消耗CPU。使用不當會形成CPU使用率極高。
        2.上面Java實現的自旋鎖是不公平的,即沒法知足等待時間最長的線程有限獲取鎖。不公平的鎖會存在「線程飢餓」問題。對象

相關文章
相關標籤/搜索