什么是CAS?
CAS全称Compare and swap,就是"比较交换",一个CAS指令涉及操作:1.比较是否相等2.如果相等就写入3.返回
CAS的应用实现原子类:
1)实现原子类:标准库中提供了java.util.concurrent.atomic包,里面的类都是基于这种方式来实现的,典型的就是 AtomicInteger
public class demo3 {
private static AtomicInteger count=new AtomicInteger(0);
public static void main(String[] args) {
Thread t1=new Thread(()->{
for(int i=0;i<100;i++)//java不支持
{
count.getAndIncrement();//count++
// count.incrementAndGet();//++count;
// count.getAndDecrement();//count--;
// count.incrementAndGet();//--count;
}
});
Thread t2=new Thread(()->{
for(int i=0;i<100;i++)//java不支持
{
count.getAndIncrement();//count++
}
});
t1.start();
t2.start();
try {
t1.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
try {
t2.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(count.get());
}
}
原子类的应用场景:
1)计数需求:播放量,点赞量,投币量等.
2)统计效果:统计出现错的请求次数,统计收到的请求的次数(衡量服务器的压力)
3)通奸每个请求的响应时间=>平均的响应时间()衡量服务器的运行效率)
4)线上服务器通过这些统计内容,进行简单的计数=>实现监控服务器/获取/统计/展示/报警