建议先解Java的CAS。
一、Java中的锁分为两种:轻量级锁,重量级锁
轻量级锁,基z于CAS:
轻量级锁常见的两个问题:
1.ABA问题:
简单解释就是有一个基本类型a = 8,一个线程把他修改为a = 1,另一个线程有把他修改为a = 8,虽然前后都是8,但是中间经历了种种变化,也就是ABA问题。然而对于基本类型的变量来说这样的修改是无伤大雅的。但对于引用类型,比如Person p = new Person(),p的这个指针,也就是引用地址,如果中间发生变更又被线程改为原来的值,那么结果可想而知,肯能定会有问题的。所以关于ABA问题,重点要看引用类型的属性。解决办法就是给这个属性加版本号或者boolean类型的标记,一旦前后不一致就不做修改操作。
2.如何保证轻量级锁的原子性:
由java底层代码c++实现,jvm对线程修改操作加锁,是将线程读操作和写操作作为一个原子性的操作。这里底层加的锁的量级肯定是低于轻量级锁的,是jvm底层保证的。
重量级锁:synchronized
重量级锁是由操作系统管