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