1. Home
  2. 代码
  3. Java

Java多线程(三)–CAS

Java多线程-CAS

1. CAS(Compare And Swap)

1.1 为什么要有CAS

      count++并不是一个原子操作;
      CAS:比较并且交换,由CPU在指令级别上保证原子性。CAS包含三个参数1):变量所在的地址V;2):变量的值A;3):我们将要修改的值B。如果V上的变量是A的话,就将值设置成B,如果不是就什么也不操作,结果返回V上的原值。
      自旋操作(循环CAS):就是在一个死循环里不断的进行CAS操作,直到成功为止。

1.2 CAS实现原子操作的三大问题

      1): ABA问题:其他的线程把值改成了C,很快改成了A。解决ABA,引入版本号:1A-》2C-》3A;
      2): 循环时间很长的话,cpu的负荷比较大;
      3): 对一个变量进行操作可以,同时操作多个共享变量有点麻烦。

1.3 原子更新基本类的类型

      AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference。
AtomicInteger的常用方法如下:
    ·int addAndGet(int delta):
    ·boolean compareAndSet(int expect,int update):
    ·int getAndIncrement(): 原子递增,但是返回的是自增以前的值
    incrementAndGet原子递增,但是返回的是自增以后的值
    ·int getAndSet(int newValue):

Java多线程(二)
Java多线程(一)

作者:catchdream,如若转载,请注明出处:https://www.6r6.cc/code/1036.html
文章内容包括PDF与软件、文章图片等内容来自于互联网、若您下载了本站分享的软件、PDF等内容下载后请于24小时内删除、与本站无任何关联、本站所有内容基于个人学习,勿做任何非法使用、本站也不传播非法内容、谢谢合作!若有侵权请联系我们下架处理-GD-sec诡道网络诡道安全

Leave a Reply

Your email address will not be published. Required fields are marked *

6 + 15 =