博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Volatile的应用
阅读量:6721 次
发布时间:2019-06-25

本文共 1010 字,大约阅读时间需要 3 分钟。

.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源码与实际不符,自己研究后再规整。

转载于:https://www.cnblogs.com/nyatom/p/9184123.html

你可能感兴趣的文章
javascript-事件绑定
查看>>
linux磁盘分区命令及操作
查看>>
关于flash播放器不为人知的四大点
查看>>
窗口显示时让字段获得焦点
查看>>
【翻译】如何创建Ext JS暗黑主题之一
查看>>
【拓扑排序】确定比赛名次
查看>>
hibernate(三)基本配置,log4j、JUnit配置
查看>>
屏幕电脑变成了黑白屏模式
查看>>
curl模拟提交
查看>>
一张图看明白云计算架构核心竞争力
查看>>
clip实现圆环进度条
查看>>
Cacti中文版安装配置
查看>>
开始 新征程
查看>>
Ubuntu 14.04 安装 Grub Customizer 4.0.6
查看>>
51CTO推荐博客列表
查看>>
Linux文件系统破坏,导致系统无法启动解决办法
查看>>
一个老外关于mobile跨平台开发的感想
查看>>
linux系统日志管理工具logrotate之生产实例
查看>>
psacct工具 /var/account/pacct文件太大
查看>>
Windows系统管理笔记(6)
查看>>