简单了解java volatile关键字实现的原理
2019-08-15 09:31
776 查看
一、volatile关键字的语义分析
1.保证可见性
对共享变量的修改,其他线程能够马上感知到。但不能保证原子性(i++)
2.保证有序性
3.volatile的原理和实现机制
有volatile修饰的共享变量进行写操作的时候会多出有 “lock”标志的汇编代码,Lock前缀的指令在多核处理器下会引发两件事情:
1)将当前处理器缓存行中的数据写回到系统内存中
2)这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效。
二、volatile的使用场景
1.状态标志(开关模式)
package com.roy.http; public class ShutDownDemmo extends Thread{ private volatile boolean state = false; @Override public void run() { while(state){ System.out.println("我在做工作"); } } public void shutDown(){ state = false; } }
当调用shutDown方法时,里面只有一个赋值操作,所以它是原子性的,同时state字段是volatile的,所以当值发生变化时其它线程会立即察觉到。
2.双重检查锁定(double-checked-locking)
package com.roy.http; public class Singleton { private volatile static Singleton instance; public static Singleton getInstance(){ if (instance==null) { synchronized (Singleton.class) { instance = new Singleton(); } } return instance; } }
单例模式中使用双重检查锁定。
三、volatile和synchronized的区别
1.使用上的区别
volatile只能修饰变量,而synchronized只能修饰方法和语句块。
2.对原子性的保证
volatile不能保证原子性,synchronized保证了原子性。
3.对可见性的保证
两者都能保证可见性,但实现原理不同
volatile对变量添加了lock,synchronized使用monitorenter和monitorexit。
4.对有序性的保证
volatile能保证有序,synchronized也能保证有序,但是代价大
5.其他
synchronized会引起阻塞,volatile不会引起阻塞。
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 就是要你懂Java中volatile关键字实现原理
- Java中volatile关键字实现原理
- Java并发编程 - volatile, synchronize关键字实现原理
- Java中volatile关键字实现原理
- Java并发编程 - volatile, synchronize关键字实现原理
- 就是要你懂 Java 中 volatile 关键字实现原理
- 就是要你懂Java中volatile关键字实现原理
- Java中volatile关键字实现原理
- 就是要你懂 Java 中 volatile 关键字实现原理
- Java 反射学习(四)反射技术开发框架原理简单实现
- 单点登录原理和java实现简单的单点登录
- JAVA线程及简单同步实现的原理解析
- Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)
- Java并发编程:从根源上解析volatile关键字的实现
- Java 内部类实现原理简单分析
- Java 队列实现原理及简单实现代码
- java 高并发中volatile的实现原理
- 绝对深度解析volatile关键字的实现原理(大部分内容整理于其他博客)
- Java特性:简单易学 跨平台性(操作系统) 可移植 JVM(虚拟机) Java语言跨平台性:原理:实现跨平台需要依赖Java虚拟机JVM(Virtual,Machine) JRE(Java Run
- 了解一下new关键字实现阻断继承的原理