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

上一篇说到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..)》

    原文作者:JUC
    原文地址: https://blog.csdn.net/u011877584/article/details/81158704
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞