• Volatile的应用


    .java 的执行过程

    1. Java代码在编译后会变成Java字节码
    2. 字节码被类加载器加载到JVM里
    3. JVM执行字节码,转化为汇编指令在CPU上执行

      Java中所使用的并发机制依赖于JVM的实现和CPU的指令

    变量修饰符-volatile

      volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性。

      可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。

      volatile使用恰当的话,比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

      volatile的定义

      Java范第3版中volatile的定如下:Java言允许线访问共享量,了确保共享量能被准确和一致地更新,线应该确保通排他锁单量。Java言提供了volatile,在某些情况下比要更加方便。如果一个字段被声明成volatileJava线程内存模型确保所有线程看到量的是一致的。

    CPU常用术语定义
    术语 英文单词 术语描述
    内存屏障   memory barriers 是一组处理器指令,用于实现对内存操作的顺序限制
    缓冲行 cache line 缓存中可以分配的最小存储单位。处理器填写缓存行时,
    会加载整个缓存行,需要使用多个主内存读周期
     缓存行填充 cache line fill   当处理器识别到从内存中读取操作数时可缓存的,
    处理器读取整个缓存行到适当的内存
     缓存命中  cache hit  如果进行高速缓存行填充操作的内存位置仍然时下次处理器访问的地址时,
    处理器从缓存中读取操作数,而不是从内存读取
    原子操作   atomic operations  不可中断的一个或一系列操作
    写命中   write hit 当处理器将缓存数写会到一个内存缓冲的区域时,
    它首先会检查这个缓存的内存地址是否在缓存行中,
    如果存在一个有效的缓存行,则处理器将这个操作数写回到缓存,
    而不是写回到内存,这个操作被称为写命中 
    写缺失   write misses the cache  一个有效的缓存行被写入到不存在的内存区域

      摘自《Java并发编程的艺术》,后续作者对比JDK源码与实际不符,自己研究后再规整。



  • 相关阅读:
    C# Winform中WndProc 函数作用
    C#程序集编译输出XML文档的作用
    C#属性访问器
    C#索引器
    static修饰符
    abstract 与 interface
    使用 Override 和 New 关键字进行版本控制
    scrapy爬虫初体验
    正则表达式
    MySQL常用指令
  • 原文地址:https://www.cnblogs.com/nyatom/p/9184123.html
Copyright © 2020-2023  润新知