, 就更新到主线程中 ;
三、乐观锁 CAS 三大问题
----
CAS : Compare and Swap , 比较再交换 , 是乐观锁中的线程访问完共享变量后 , 先进行变量比较 , 然后在同步共享变量值...X = 0 , 访问期间 , 线程 B 访问 X 将其改为 1 , 然后 线程 C 访问 X 将其又改为 0 , 此时线程 A 访问完毕后 , 查询发现变量 X 仍然是 0 , 认为期间没有线程访问该变量..., 校验失败 , 导致 重复执行线程代码 , 会给 CPU 带来很大开销 , 这些 CPU 时间片都浪费了 ;
解决方案 : 将锁升级 ;
保证多个共享变量原子性问题 :
问题描述 : 针对 单个共享变量...访问时 , 使用 atomic 原子类 可以使用 CAS 保证原子操作 , 如果 有多个共享变量 , CAS 无法保证操作的原子性 ;
解决方案 : 使用 JDK 提供的 AtomicReference...封装多个变量到一个类对象中 , 保证共享变量的原子性 ;
线程 A 访问共享变量的操作 , 不是原子操作 , 就会导致如下问题 :
线程 A 访问变量 X , 执行完毕后 , 变量 X 值原始值进行比较