zoukankan      html  css  js  c++  java
  • VolatileDemo

    package com.fh.interview;
    
    /**
     * volitile关键字学习
     *
     *
     * 缓存一致性协议
     * 每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期
     *
     *
     * 1、Lock前缀的指令会引起处理器缓存写回内存;
       2、一个处理器的缓存回写到内存会导致其他处理器的缓存失效;
       3、当处理器发现本地缓存失效后,就会从内存中重读该变量数据,即可以获取当前最新值。
    
    
     在每个volatile写操作的前面插入一个StoreStore屏障;
     在每个volatile写操作的后面插入一个StoreLoad屏障;
     在每个volatile读操作的后面插入一个LoadLoad屏障;
     在每个volatile读操作的后面插入一个LoadStore屏障。
     需要注意的是:volatile写是在前面和后面分别插入内存屏障,而volatile读操作是在后面插入两个内存屏障
     StoreStore屏障:禁止上面的普通写和下面的volatile写重排序;
     StoreLoad屏障:防止上面的volatile写与下面可能有的volatile读/写重排序
     LoadLoad屏障:禁止下面所有的普通读操作和上面的volatile读重排序
     LoadStore屏障:禁止下面所有的普通写操作和上面的volatile读重排序
    
    
     * @author
     * @create 2018-05-27 下午10:06
     **/
    public class VolitileDemo {
    
        public volatile String message = "000";
    
        public void test(){
    
        }
    
        /**
         * synchronized: 具有原子性,有序性和可见性; volatile:具有有序性和可见性
         */
        private volatile static VolitileDemo volitileDemo;
    
        public VolitileDemo(){
            if(volitileDemo==null){
                synchronized (VolitileDemo.class){
                    if(volitileDemo == null){
                        volitileDemo = new VolitileDemo();
                    }
                }
            }
        }
    
        public static volatile int count = 0;
    
        /**
         * volatile不能保证原子型
         * @param args
         */
        public static void main(String[] args) {
            for (int i = 0;i<10;i++){
                Thread thread = new Thread(new Runnable() {
                    public void run() {
                        for (int i= 0;i<1000;i++){
                            count++;
                        }
                    }
                });
                thread.start();
            }
            try {
                Thread.sleep(1000);
            }catch (Exception e){
    
            }
            System.out.println(count);
        }
    }
  • 相关阅读:
    iOS-触摸事件、手势识别、摇晃事件、耳机线控
    iOS-App生命周期
    Foundation框架—时间处理对象NSDate
    Kali linux渗透测试的艺术 思维导图
    数据结构_二叉树遍历
    数据结构_数值转换
    <转载>Mac下,使用sshpass让iterm2支持多ssh登录信息保存
    <转载>iTerm2使用技巧
    Maven打包编译找不到com.sun.crypto.provider.SunJCE类
    MySQL自动设置create_time和update_time
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9102581.html
Copyright © 2011-2022 走看看