共计 391 个字符,预计需要花费 1 分钟才能阅读完成。
cas 原理
cas 全称 Compare and swap,比较和交换的意思。原子操作,需要硬件的支持。
三个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。
举个线程 A 想执行相加的例子。
- 内存地址 V 有个值是 1。
- 线程 A 把 V 的值放在 A 中。
- 线程 A 执行 V +2,得到的 3 为 B。
- 把 A 和 V 的值比较,如果不一样,重新执行 2 的步骤。
- 如果一样,把 V 的值替换为 B。
synchronized,volatile,cas
- synchronized:独占锁,会导致其他所有需要锁的线程挂起,等待持有锁的线程释放锁。
- volatile:可见性,不保证原子性。
- cas:乐观锁,不适用锁的情况下实现多线程的变量同步。
缺点
- ABA 问题:在上面例子中,如果 V 的值是 1,被 B 线程变成 2,再被 A 线程变成 1,那么对于 A 线程来说,还是当做没有变化。解决的办法就是加版本号。
- 性能问题:在并发量较高的情况下,如果一直不成功,会一直增加 CPU 的开销。
正文完