java面试-谈谈你对volatile的理解

volatile是Java虚拟机提供的轻量级的同步机制。主要有三大特性:
一、保证可见性
1、代码演示
2、volatile是如何来保证可见性的呢?
如果对声明了volatile的变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令。
1)将这个变量所在缓存行的数据写回到系统内存。
2)这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。
二、不保证原子性
1、代码演示
2、volatile为什么不保证原子性?

n++被拆分成3个指令:

getfield  从主内存中拿到原始值iadd      在线程工作内存中进行加1操作putfield  把累加后的值写回主内存

3、如何解决原子性问题
synchronized
Lock
AtomicInteger
三、禁止指令重排序

原文地址:https://www.cnblogs.com/wjh123/p/11094691.html

时间: 2024-10-24 10:51:16

java面试-谈谈你对volatile的理解的相关文章

java面试-谈谈你对OOM的理解

1.java.lang.StackOverflowError:在一个函数中调用自己就会产生这样的错误(栈溢出) public class StackOverFlowErrorDemo { public static void main(String[] args) { stackOverFlowError(); } public static void stackOverFlowError(){ stackOverFlowError(); } } 2.java.lang.OutOfMemoryE

面试:谈谈你对jQuery的理解

jQuery是一个轻量级的javascript框架,极大的简化了js的编程. 1.首先jQuery提供了强大的元素选择器.用于获取html页面中封装了html元素的jQuery对象.像常见的选择器有:基本选择器,层次选择器,过滤选择器,表单选择器. 2.第二点就是jQuery提供了对css样式操作的支持,像对class属性的增加删除切换操作.还有对单个样式操作的支持的css方法,提供了一种简洁统一的操作样式的方法. 3.第三点就是jQuery出色的DOM操作的封装,极大的简化了javascrip

全面理解Java内存模型(JMM)及volatile关键字(转)

原文地址:全面理解Java内存模型(JMM)及volatile关键字 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(Reetr

java面试总躲不过的并发(二):volatile原理 + happens-before原则

一.happens-before原则 同一个线程中的,前面的操作 happens-before 后续的操作.(即单线程内按代码顺序执行.但是,在不影响在单线程环境执行结果的前提下,编译器和处理器可以进行重排序,这是合法的.换句话说,这一是规则无法保证编译重排和指令重排). 1. 监视器上的解锁操作 happens-before 其后续的加锁操作.(Synchronized 规则) 2. 对volatile变量的写操作 happens-before 后续的读操作.(volatile 规则) 3.

Java线程工作内存与主内存变量交换过程及volatile关键字理解

Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模型要区别于通常所说的虚拟机堆模型: 2. 线程独有的工作内存和进程内存(主内存)之间通过8中原子操作来实现,如下图所示: 原子操作的规则(部分): 1) read,load必须连续执行,但是不保证原子性. 2) store,write必须连续执行,但是不保证原子性. 3) 不能丢失变量最后一次ass

volatile变量理解 via《Java并发编程实战》

第3章:对象的共享 volatile关键字的理解 volatile变量,用来确保将变量的更行操作通知到其他线程.当变量申明为volatile类型后,编译器与运行时都会注意带这个变量时共享的,因此不会将该变量上的操作与其他内存操作一起重新排序.volatile变量不会被缓存到寄存器或者其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新的写入值.可以把volatile关键字理解为java的弱同步机制(相比于synchronized).volatile还能保证64位读/写操作的

Java面试官最爱问的volatile关键字

在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?为什么爱问volatile关键字 爱问volatile关键字的面试官,大多数情况下都是有一定功底的,因为volatile作为切入点,往底层走可以切入Java内存模型(JMM),往并发方向走又可接切入Java并发编程,当然,再深入追究,JVM的底层操作.字节码的操作

【Java 面试】面试

一. 笔试题之Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他.有些题来自网上搜集整理,有些题来自传智播客学员面试后的反馈,说真的,少数一些网上的面试题,我真怀疑其是否还有存在价值! 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有没有goto?

java 面试 -- 4

Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大).本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应