目录
CAS实现了java.until.automatic类,来保证操作都是原子性的。
一.CAS
CAS实现了java.util.concurrent.atomic类,来保证操作都是原子性的。
public class SpinLock {
private Thread owner = null;
public void lock(){
// 通过 CAS 看当前锁是否被某个线程持有.
// 如果这个锁已经被别的线程持有, 那么就自旋等待.
// 如果这个锁没有被别的线程持有, 那么就把 owner 设为当前尝试加锁的线程.
while(!CAS(this.owner, null, Thread.currentThread())){
}
}
public void unlock (){
this.owner = null;
}
}
1.CAS是乐观锁
CAS可以理解为一个乐观锁,因为他的伪代码实现:当数据冲突时不会阻塞等待,只会返回错误
boolean CAS(address, expectValue, swapValue) {
if (&address == expectedValue) {
&address = swapValue;
ret