zoukankan      html  css  js  c++  java
  • 2. 原子变量

    package com.gf.demo02;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * 一、i++ 的原子性问题:i++ 的操作实际上为三个步骤 “读-改-写”
     * 			int i = 10;
     * 			i = i++; //结果为10
     * 			
     *          int temp = i;
     *          i = i+1;
     *          i = temp;
     * 
     * 二、原子变量:jdk1.5 后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) {
    			e.printStackTrace();
    		}
    		
    		System.out.println(Thread.currentThread().getName() + ":" + getSerialNumner());
    	}
    	
    	public int getSerialNumner(){
    		//return serialNumber++;
    		return serialNumber.incrementAndGet();
    	}
    }
    

    关注我的公众号,精彩内容不能错过

  • 相关阅读:
    (转载)Linux进程基础
    C语言字符串
    DNS域名解析服务
    Linux-SSH远程管理
    Linux文件系统深入了解
    Linux进程和计划任务管理
    Linux账户与权限管理
    MySQL实现读写分离
    SQL数据库常用函数
    MySQL进阶查询(二)
  • 原文地址:https://www.cnblogs.com/huanchupkblog/p/8037589.html
Copyright © 2011-2022 走看看