1. 程式人生 > >利用CAS實現自旋鎖

利用CAS實現自旋鎖

什麼是自旋鎖

自旋鎖是一種十分常見的鎖結構,自旋鎖在申請資源但是申請不到的情況下並不會掛起,而是會選擇持續申請。這種鎖結果適用於每個執行緒佔用較少時間的鎖,並且執行緒阻塞狀態切換的代價遠高於等待的代價時使用。

CAS操作

CAS操作底層給予組合語言實現,是原子操作。Java對CAS操作也實現了上層的封裝。通過CAS操作,可以對基本資料型別和引用型別進行賦值操作。

Java實現

import java.util.concurrent.atomic.AtomicReference;

class Scratch {
    public static void main(String[] args) {
        Thing thing1 = new
Thing(); Thing thing2 = new Thing(); thing1.start(); thing2.start(); } static class Thing extends Thread { private AtomicReference<Thread> atomicReference = new AtomicReference<>(); private void lock() { while (atomicReference.compareAndSet(null
, currentThread())) ; } private void unlock() { atomicReference.compareAndSet(currentThread(), null); } @Override public void run() { lock(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread()); unlock(); } } }