在研究线程池的执行原理时,看到一段不断循环重试的代码,不理解它的原理,看注释这是CAS的实现,所以学会之后记录下来。在多线程并发下,可以通过加锁来保证线程安全性,但多个线程同时请求锁,很多情况下避免不了要借助操作系统,线程挂起和恢复会存在很大的开销,并存在很长时间的中断。一些细粒度的操作,例如同步容器,操作往往只有很少代码量,如果存在锁并且线程激烈地竞争,调度的代价很大。现代的处理器都包含对并发的支持,其中最通用的方法就是比较并交换,简称CAS。当多个线程尝试使用CAS同时更新一个变量,最终只有一个线程会成功,其他线程都会失败。对AtomicInteger进行+1操作,循环里,会将当前值和+1后的目标值传入compareAndSet,直到成功才跳出方法。

学习非阻塞的同步机制CAS

学习非阻塞的同步机制CAS

学习非阻塞的同步机制CAS