上一篇说到volatile只有内存可见行,没有原子性。   juc为我们提供了一些原子变量。

juc-----原子变量(atomic..)

----------------------代码举例-------------------

package com.fjf.juc;


/**
 * i++  不具有原子性。 读   修改  写
 * 
 * volatile 能保证内存可见性,并不能保证原子性
 * @author Administrator
 *
 */
public class TestAtomic {
    public static void main(String[] args) {
        Atomictd atomictd = new Atomictd();
        for (int i = 0; i <10; i++) {
            new Thread(atomictd).start();
        }
    }
    
}

class  Atomictd implements Runnable{
    private volatile int num = 0;
    @Override
    public void run() {
    
    try {
        Thread.sleep(300);
        System.out.println(num++);
    } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
}
juc-----原子变量(atomic..)

----------------

修改为原子变量后,可保证其原子性。

juc-----原子变量(atomic..)

--------------

总结:

原子变量   1.利用volatile保证可见性2.利用cas算法(compare-and-swap)来保证原子性。

juc-----原子变量(atomic..)

相关文章:

  • 2022-02-26
  • 2021-11-23
  • 2022-02-24
  • 2021-10-17
  • 2021-07-11
  • 2022-12-23
  • 2021-12-31
  • 2021-08-18
猜你喜欢
  • 2022-03-07
  • 2022-12-23
  • 2021-11-23
  • 2020-01-09
  • 2021-09-18
  • 2021-09-21
相关资源
相似解决方案