• volatile的个人理解


    package com.example.demo;
    
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.atomic.AtomicInteger;
    
    //测试volatile基于cas实现atomicInteger,
    //解决num++复合计操作问题
    public class VolitileTest {
        static AtomicInteger num = new AtomicInteger(0);
        //使用CountDownLatch来等待计算线程执行完
        static CountDownLatch countDownLatch = new CountDownLatch(30);
    
        public static void main(String[] args) {
            for (int i = 0; i < 30; i++) {
                new Thread(() -> {
                    for (int j = 0 ; j< 10 ; j++){
                        num.getAndIncrement();
                    }
                    countDownLatch.countDown();
                }).start();
            }
            try {
                //计数结束后唤醒当前线程
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(num);
    
        }
    }
    
    //验证volatile 在保证原子性的情况实现共享变量可见性
    class  b{
        static volatile boolean flag = false;
    
        public static void main(String[] args) {
    
            for (int i = 0 ; i < 10 ; i++){
                new Thread(()->{
                    if(flag == true){
                        System.out.println(Thread.currentThread().getName() + "run");
                    }else{
                        System.out.println(Thread.currentThread().getName() + "false");
                    }
                }).start();
            }
            new Thread(()->{
                flag = true;
            }).start();
        }
    }
    //volatile 禁止指令重排
    //指令重排意思是相互依赖的操作在单线程情况无论指令怎样重排都必须保证正确性
    //禁止指令重排,是指在特定的共享变量上插入内存屏障禁止处理器指令重排
    
    /**
     *  volatile禁止指令重排序也有一些规则,简单列举一下:
    
       1.当第二个操作是voaltile写时,无论第一个操作是什么,都不能进行重排序
    
       2.当地一个操作是volatile读时,不管第二个操作是什么,都不能进行重排序
    
       3.当第一个操作是volatile写时,第二个操作是volatile读时,不能进行重排序
     */
    class c{
    
    }
  • 相关阅读:
    FusionInsight HD组件介绍
    Hive与HBase的区别与联系
    SSD与HDD、HHD的区别
    RAID 2.0 技术(块虚拟化技术)
    Fusionstorage的逻辑架构
    介绍一下什么是“虚拟化”
    介绍一下什么是“云计算”
    介绍一下什么是“存储器”
    介绍一下什么是“服务器”
    SAS与SATA的区别
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/12893120.html
Copyright © 2020-2023  润新知