1.锁
- 锁的分类
悲观锁---导致其他需要锁的线程挂起,等待持有锁的线程释放
乐观锁---不加锁,若冲突就重试,直到成功为止
2.Compare and Swap 比较并交换(CAS)
解决:并不是用锁,而是一种思想
ABA问题
3.代码:
package cn.zwl.other;
/**
*
* 比较并交换
* @author dell
*
*/
import java.util.concurrent.atomic.AtomicInteger;
public class CAS {
//库存
private static AtomicInteger stock=new AtomicInteger(5);
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new Thread(()-> {
Integer left=stock.decrementAndGet();
if(left<1) {
System.out.println("抢完了");
}
System.out.println(Thread.currentThread().getName()+"抢到了一件商品"+"-->还剩"+left);
}).start();
}
}
}