zoukankan      html  css  js  c++  java
  • GUC-2 原子性

    import java.util.concurrent.atomic.AtomicInteger;
    
    /*
     * 一、i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写”
     *           int i = 10;
     *           i = i++; //10
     * 
     *           int temp = i;
     *           i = i + 1;
     *           i = temp;
     * 
     * 二、原子变量:在 java.util.concurrent.atomic 包下提供了一些原子变量。
     *         1. volatile 保证内存可见性
     *         2. CAS(Compare-And-Swap) 算法保证数据变量的原子性
     *             CAS 算法是硬件对于并发操作的支持
     *             CAS 包含了三个操作数:
     *             ①内存值  V
     *             ②预估值  A
     *             ③更新值  B
     *             当且仅当 V == A 时, V = B; 否则,不会执行任何操作。
     */
    public class TestAtomicDemo {
    
        public static void main(String[] args) {
            AtomicDemo ad = new AtomicDemo();
            
            for (int i = 0; i < 10; i++) {
                new Thread(ad).start();
            }
        }
        
    }
    
    class AtomicDemo implements Runnable{
        
    //    private volatile int serialNumber = 0;
        
        private AtomicInteger serialNumber = new AtomicInteger(0);
    
        @Override
        public void run() {
            
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
            }
            
            System.out.println(getSerialNumber());
        }
        
        public int getSerialNumber(){
            return serialNumber.getAndIncrement();
        }
        
        
    }
  • 相关阅读:
    HTTP概述
    【HTTP权威指南】第二章URL与资源
    【HTTP权威指南】第三章HTTP报文
    列表生成式
    六一问候
    NYOJ 528 找球号(三)
    NYOJ 138 找球号(二)
    HDU3790 最短路径问题
    NYOJ 228 士兵杀敌(五)
    NYOJ3 3 多边形重心问题
  • 原文地址:https://www.cnblogs.com/surge/p/10476219.html
Copyright © 2011-2022 走看看