什么是自旋锁
自旋锁是一种十分常见的锁结构,自旋锁在申请资源但是申请不到的情况下并不会挂起,而是会选择持续申请。这种锁结果适用于每个线程占用较少时间的锁,并且线程阻塞状态切换的代价远高于等待的代价时使用。
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();
}
}
}