• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

java并发编程学习之cas(一)

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0715/8143.html 1190000019756329

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的开销。
  3. 只能保证一个共享变量的原子操作

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!