zoukankan      html  css  js  c++  java
  • 锁的内存语义

    锁的内存语义

    锁的释放与获取所建立的happen-before关系

    锁的释放与内存语义

    锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息

    volatile的内存语义

    volatile读写所建立的happens-before关系

    volatile读写的内存语义

    public class Demo2 {
    
        private int a;
        private volatile boolean flag;
    
        public void writer(){
            a = 1; //1
            flag = true; //2
        }
    
        public void reader(){
             if(flag){ //3
                int b = a +1; //4
                System.out.println(b); //5
            }
    
        }
    
    }

    2.当写一个volatile变量时,Java内存模型会把该线程对应的本地内存中的共享变量刷新到主内存

    3.当读一个valatile变量时,Java内存模型会把当前线程对应的本地内存中的共享变量置为无效,然后从主内存中读取共享变量

    final域的内存语义

    写final域的重排序规则

    禁止把final域的写 重排序到构造方法之外

    java 内存模型禁止编译器把final域的写重排序到构造方法之外

    编译器会在final域的写之后,在构造方法执行完毕之前,插入一个内存屏障StoreStore,保证处理器把final 域的写操作在构造方法中执行

    读final域的重排序规则

    在一个线程中,初次读对象引用和初次读该对象所包含的final 域,java内存模型禁止处理器重排序这两个操作

    final域为静态类型

    final域为抽象类型

    在构造方法内对一个final引用的对象的成员域的写入,与随后在构造方法外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序

  • 相关阅读:
    Spring 中PageHelper分页插件使用
    手写Spring框架学习笔记
    Spring 集成Junit单元测试
    创建产品服务工程
    Oracle 常用SQL语句
    解决The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone
    微服务如何拆分
    Eureka的高可用
    Eureka Client的使用
    Spring Cloud Eureka Server使用(注册中心)
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11216303.html
Copyright © 2011-2022 走看看