利用CAS實現自旋鎖
阿新 • • 發佈:2019-02-17
什麼是自旋鎖
自旋鎖是一種十分常見的鎖結構,自旋鎖在申請資源但是申請不到的情況下並不會掛起,而是會選擇持續申請。這種鎖結果適用於每個執行緒佔用較少時間的鎖,並且執行緒阻塞狀態切換的代價遠高於等待的代價時使用。
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();
}
}
}