java并发编程学习之cas一

6次阅读

共计 391 个字符,预计需要花费 1 分钟才能阅读完成。

cas 原理

cas 全称 Compare and swap,比较和交换的意思。原子操作,需要硬件的支持。
三个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。
举个线程 A 想执行相加的例子。

  1. 内存地址 V 有个值是 1。
  2. 线程 A 把 V 的值放在 A 中。
  3. 线程 A 执行 V +2,得到的 3 为 B。
  4. 把 A 和 V 的值比较,如果不一样,重新执行 2 的步骤。
  5. 如果一样,把 V 的值替换为 B。

synchronized,volatile,cas

  • synchronized:独占锁,会导致其他所有需要锁的线程挂起,等待持有锁的线程释放锁。
  • volatile:可见性,不保证原子性。
  • cas:乐观锁,不适用锁的情况下实现多线程的变量同步。

缺点

  1. ABA 问题:在上面例子中,如果 V 的值是 1,被 B 线程变成 2,再被 A 线程变成 1,那么对于 A 线程来说,还是当做没有变化。解决的办法就是加版本号。
  2. 性能问题:在并发量较高的情况下,如果一直不成功,会一直增加 CPU 的开销。
正文完
 0