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

  • 相关阅读:
    2020软件工程作业02
    第一次作业
    伪造IP
    Windows 上安装metasploit
    Kali安装 Typora
    在linux系统中安装调用汉语打字软件
    2020 年 10 月 10 日跑步随想
    最长公共前缀
    N皇后
    一道有趣的异步题
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11216303.html
Copyright © 2011-2022 走看看