`
jtjs1989
  • 浏览: 13438 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 里面volatile

阅读更多
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
分享到:
评论

相关推荐

    java 队列使用

    java 队列使用,次例子是一个模拟网络爬虫工作大致流程的小例子,里面没有具体的爬取的实现,只是对爬取的流程的模拟,使用到了java 的 ArrayBlockingQueue、ConcurrentHashMap、 这2个类和java 的 volatile 关键字...

    一些Java中不为人知的特殊方法.docx

    如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatile的。顺便说一句,如果在Java面试里问到“什么是volatile方法?”,你可能会吓出一身冷汗。正确的答案是没有volatile方法。但同时,...

    Java常见面试题208道.docx

    165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几? 166.如何获取当前数据库版本? 167.说一下 ACID 是什么? 168.char 和 varchar 的区别是什么? 169...

    java面试800题

    构造函数是和类同名的函数,没有返回类型,构造函数不能在普通的程序里面调用,只有当这个类被应用new实例化的时候才会被运行。构造函数没有返回类型,实际上,构造函数返回的就是这个class本身。 类初始化时构造函数...

    整理后java开发全套达内学习笔记(含练习)

    在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion 以“%”开头,[第几个数值$][flags][宽度][.精确度][格式] printf()的引入是为了照顾c语言程序员的感情需要 格式化输出...

    Java 虚拟机面试题全面解析(干货)

    虚拟机是如何执行方法里面的字节码指令的? 解释执行 基于栈的指令集和基于寄存器的指令集 什么是基于栈的指令集? 什么是基于寄存器的指令集? 基于栈的指令集的优缺点? Javac编译过程分为哪些步骤? 什么是即时编译器?...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【*JVM】查看jvm虚拟机里面堆、线程的信息,你用过什么命令? 59 【JVM】垃圾回收算法有哪些? 59 引用计数法(Reference Counting Collector) 59 tracing算法(Tracing Collector) 61 compacting算法(Compacting ...

    java并发理论摘要

    所谓的数据依赖是指,如果多个java指令之间顺序变化会影响结果,那么说明这个这两个指令存在数据依赖关系。 as-if-serial 在一个线程中,会考虑数据依赖问题,也就是说如果两个指令有数据依赖的关系,那么不会重排序...

    Java并发学习-AtomicIntegerFieldUpdater字段原子更新类.docx

    相信前言部分讲的已经很清晰易懂了,AtomicIntegerFieldUpdater就是用来更新某一个实例对象里面的int属性的。 但是注意,在用法上有规则: 字段必须是volatile类型的,在线程之间共享变量时保证立即可见 字段的...

    java线程池概念.txt

    volatile int runState; static final int RUNNING = 0; 运行状态 static final int SHUTDOWN = 1; 关闭状态;SHUTDOWN状态,此时线程池不能够接受新的任务,它会等待所有任务执行完毕 static final int STOP = 2;...

    关于使用JAVA单例的问题分析

    这个问题由开始使用JACKSON JSON而衍生出来,因为官网上建议将ObjectMapper作为全局变量使用从而提高效率,所以,我们项目里面使用了单例,在使用单例的时候,我们无可厚非的考虑了资源在使用时是否要保证互斥的情况...

    ip地址库 很全的库

    // 判断是否这个地点里面包含了s子串,如果包含了,添加这个记录到List中,如果没有,继续 if (loc.country.indexOf(s) != -1 || loc.area.indexOf(s) != -1) { IPEntry entry = new IPEntry(); ...

    93个netty高并发教学视频下载.txt

    下载txt文档,里面有永久分享的连接。包括01_学习的要义;02_Netty宏观理解;03_Netty课程大纲深度解读;04_项目环境搭建与Gradle配置;05_Netty执行流程分析与重要组件介绍;06_Netty回调与Channel执行流程分析;07...

    ffmpeg-20170620-ae6f6d4-win64

    // 从map里面取数据,组装成命令 String comm = getComm4Map(paramMap); ConcurrentMap, Object> resultMap = null; // 执行命令行 final Process proc = Runtime.getRuntime().exec(comm); System.out....

    sesvc.exe 阿萨德

    Java JavaScript PHP iOS Android HTML5 CSS3 Linux C++ Python C# Node.Js 一文让你彻底理解 Java HashMap 和 ConcurrentHashMap 2018-07-25 分类:JAVA开发、编程开发、首页精华0人评论 ...

Global site tag (gtag.js) - Google Analytics