zoukankan      html  css  js  c++  java
  • volatile

    *****线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
    
    volatile的特性
    
    当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:
    
    class VolatileFeaturesExample {
        volatile long vl = 0L;  //使用volatile声明64位的long型变量
    
        public void set(long l) {
            vl = l;   //单个volatile变量的写
        }
    
        public void getAndIncrement () {
            vl++;    //复合(多个)volatile变量的读/写
        }
    
    
        public long get() {
            return vl;   //单个volatile变量的读
        }
    }
    假设有多个线程分别调用上面程序的三个方法,这个程序在语意上和下面程序等价:
    
    class VolatileFeaturesExample {
        long vl = 0L;               // 64位的long型普通变量
    
        public synchronized void set(long l) {     //对单个的普通 变量的写用同一个监视器同步
            vl = l;
        }
    
        public void getAndIncrement () { //普通方法调用
            long temp = get();           //调用已同步的读方法
            temp += 1L;                  //普通写操作
            set(temp);                   //调用已同步的写方法
        }
        public synchronized long get() { 
        //对单个的普通变量的读用同一个监视器同步
            return vl;
        }
    线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。

  • 相关阅读:
    MYSQL学习笔记——数据类型
    MYSQL学习笔记——常用语句
    MYSQL学习笔记——基本语法
    Java虚拟机——类加载机制
    Java虚拟机——Class类文件结构
    Tmux
    nginx 更新提示端口占用的解决办法
    fcitx 无法启动
    E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
    清除浮动
  • 原文地址:https://www.cnblogs.com/rojas/p/5351633.html
Copyright © 2011-2022 走看看