首页 > 编程语言 > 详细

Java多线程volatile关键字

时间:2021-06-29 23:08:39      阅读:22      评论:0      收藏:0      [点我收藏+]

volatile的应用

Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令

volatile是个轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性"。可见性的意思就是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

volatile的定义

Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,某些情况下比所更方便。如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。

volatile的内存语义

当声明共享变量为volatile后,对这个变量的读/写将会很特别。

锁的happens-before规则保证释放锁和获取锁的两个线程之间的内存可见性,这意味着对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。

锁的语义决定了临界区代码的执行具有原子性。这意味着即使是64位的long型和double型变量,只要是volatile变量就具有原子性。多个volatile整体上不具有原子性。

简而言之,volatile变量自身具有下列特性:

  • 可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入
  • 原子性:对任意的单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。

Java多线程volatile关键字

原文:https://www.cnblogs.com/sgw1018/p/Java-volatile.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!