zoukankan      html  css  js  c++  java
  • 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源码与实际不符,自己研究后再规整。



  • 相关阅读:
    javascript中的常用表单事件用法
    关于js键盘事件的例子
    对象间引用赋值及方法时引用传递
    反编译工具reflector破解方法
    使用委托(C# 编程指南)
    委托(C# 编程指南)
    浅谈线程池(下):相关试验及注意事项
    Lambda 表达式(C# 编程指南)
    浅谈线程池(中):独立线程池的作用及IO线程池
    浅谈线程池(上):线程池的作用及CLR线程池
  • 原文地址:https://www.cnblogs.com/nyatom/p/9184123.html
Copyright © 2011-2022 走看看