synchronized和CAS的区别:
相同点:在多线程的情况下,都可以保证共享数据的安全性。
不同点:
synchronized总是从最坏的角度出发,认为每次获取数据的时候,别人都有可能修改。
所以在每次操作共享数据之前,都会上锁。(悲观锁)
cas是从乐观的角度出发,假设每次获取数据别人都不会修改,所以不会上锁。只不过在修改共享数据的时候,会检查一下,别人有没有修改过这个数据。
如果别人修改过,那么我再次获取现在最新的值。
如果别人没有修改过,那么我现在直接修改共享数据的值.(乐观锁)(乐观锁不是锁)