CAS及ABA问题

compare and swap 是用无锁(java层级)的方式来实现线程安全。底层使用unsafe类,追踪unsafe类的native方法,最终发现底层汇编级别仍然使用lock来实现操作原子性(lock cmpxchg)

cas成功并非意味着变量在此期间未发生变化,有可能A->B->A,对于原始数据类型,如AtomicInteger可以忽略ABA问题,对于复杂对象(属性可能被更改),需要根据情况来判断是否处理,版本号是解决ABA问题的一种常见手段,典型应用的是AtomicStampedReference

猜你喜欢

转载自blog.csdn.net/qian_348840260/article/details/106477830