CAS无锁机制原理:
1 首先需要定义一个具有原子性的共享变量;
2 状态值为0时表示没有线程获取到锁;
3 状态值为1时表示有线程获取到锁;
具体实现:
获取锁:
将锁的状态从0修改为1,如果能够修改成功,则表示获取锁成功,如果修 改失败,则表示获取锁失败,失败之后不会阻塞当前线程,而是通过循环来进行重试,也就是我们常说的自旋,当时需要注意自旋的次数需要控制,否则会导致CPU资源浪费。
释放锁:
将锁的状态从1修改为0,如果能够修改成功则表示释放锁成功。
import java.util.concurrent.atomic.AtomicLong;
public class AtomicLock {
private AtomicLong atomic = new AtomicLong(0);
private Thread currentThread;
public Boolean tryLock() {
boolean result = atomic.compareAndSet(0, 1);
if (result) {
currentThread = Thread.currentThread();
}
return result;
}
private Boolean unLock() {
if (currentThread != Thread.currentThread()) {
return false;
}
return atomic.compareAndSet(1, 0);
}
}