访问结束 , 线程 B 访问该共享资源 ;
悲观锁 : 只要有 线程 来操作 共享资源 , 就认为肯定 有其它若干线程也要操作该共享资源 , 一定要 对共享资源进行加锁 ; 任何情况下 , 哪怕 只有一个线程访问共享资源..., 也要对该共享资源进行加锁 ; ( 持有悲观的态度 )
对共享资源加锁 , 会对该资源产生负面影响 , 效率会降低 ;
如果只是 单线程访问资源 , 不会产生并发问题 , 没有必要进行加锁 ; 如果加了锁...CAS 相关问题 ;
java.util.concurrent 包简称 J.U.C ;
CAS 解决的
3
大问题 :
ABA 问题 :
问题描述 : 线程 A 访问变量 X = 0 , 访问期间..., 线程 B 访问 X 将其改为 1 , 然后 线程 C 访问 X 将其又改为 0 , 此时线程 A 访问完毕后 , 查询发现变量 X 仍然是 0 , 认为期间没有线程访问该变量 ;
解决方案 : 给变量设置一个版本号..., 每次线程访问变量时 , 版本号 +1 , 这样每次判断变量的版本号即可 ;
循环时间过长 :
问题描述 : 乐观锁中 , 假如连续多次写回数据时 , 发现值改变 , 校验失败 , 导致 重复执行线程代码