volatile关键字简介

来源:互联网 发布:002175 东方网络 编辑:程序博客网 时间:2024/06/06 00:49
一、单线程下变量读取操作
         jvm运行时刻内存的分配。其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样在堆中的对象的值就产生变化了。 出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。
二、多线程下volatile修饰变量的读取操作
         在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。 
三、volatile的特点
        1.保证读取的可见性 、可读性
         2.禁止指令重排

PS:指令重排序:http://blog.csdn.net/liangyihuai/article/details/50670215


0 0
原创粉丝点击