Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
分享到:
相关推荐
Java Volatile 机制详解 Java 中的 volatile 关键字是一种轻量级的同步机制,在并发编程中扮演着重要的角色。了解 Java volatile 需要从内存模型基本概念开始。 内存模型基本概念 在计算机执行程序时,每条指令都...
java 队列使用,次例子是一个模拟网络爬虫工作大致流程的小例子,里面没有具体的爬取的实现,只是对爬取的流程的模拟,使用到了java 的 ArrayBlockingQueue、ConcurrentHashMap、 这2个类和java 的 volatile 关键字...
- **volatile关键字**:确保变量在不同线程间的可见性。 - **锁(Lock)**:提供了比`synchronized`更灵活的锁定机制,支持诸如尝试锁、定时锁等功能。 ### 示例分析 在提供的代码示例中,展示了一个简单的计数器...
3. **java里面synchronized用法.doc**:`synchronized`关键字是Java中的同步控制机制,用于处理多线程环境下的并发问题。文档可能讲解了其基本用法(同步代码块和同步方法)、锁的概念、可见性和有序性保证,以及与...
解压并加载这个ISO文件,你可以发现里面包含的文件结构与书中章节对应,便于按照学习进度逐步探索。源代码文件可能包含.java文件,这些是Java源程序,可以通过编译器如JDK的javac命令进行编译。同时,可能还会有.jar...
理解这些并发原语,如synchronized、volatile、Lock接口以及Atomic类,对于深入理解FQS的源码至关重要。 其次,提到"oracle"标签,表明FQS可能与Oracle数据库有交互。在Java应用中,JDBC(Java Database ...
3. **volatile变量规则**:写一个volatile变量发生在后续对该volatile变量的读操作之前。 4. **传递性**:如果操作A发生在操作B之前,且操作B发生在操作C之前,则操作A发生在操作C之前。 5. **start()规则**:如果...
Java源代码经过编译后生成.class文件,里面包含的是字节码。JVM通过类加载器加载这些字节码,将它们转换为运行时的类对象。类加载器分为引导类加载器、扩展类加载器和应用程序类加载器,遵循双亲委派模型,确保类...
【压缩包子文件的文件名称列表】中的"葵花宝典(JAVA).doc"是文档的具体名称,很可能是一个Microsoft Word文档,里面包含了整理好的面试题目和解析。这样的文档通常会按照不同主题或难度进行分类,方便学习者系统地...
这个zip文件包含了一个名为"java-course-learning-java-master"的项目目录,预示着它可能是一个GitHub仓库的克隆,里面可能包含了各种代码示例、练习和项目文件,帮助学习者深入理解Java编程。 Java是一种广泛使用...
这些只是Java高级面试中可能涉及的一部分内容,具体到“Java高级面试题答案”这个压缩包,里面可能包含了对以上知识点的详细解答和解析,帮助求职者更好地准备面试。建议读者不仅要看答案,还要深入理解每个知识点...
Java语言中有许多关键字,例如synchronized、serialize、volatile、static、final、abstract等。这些关键字都有其特定的用途和含义。 构造方法 构造方法是类中的特殊方法,用于初始化对象的状态。构造方法必须与类...
关键字有synchronized、volatile和atomic。sleep()和wait()都是线程同步的机制,sleep()用于使线程暂停一段时间,而wait()用于使线程等待某个条件的发生。可以使用notify()或notifyAll()来唤醒wait()停止的线程。 9...
【描述】"Java面试题基础篇共3页.pdf.zip" 提示这是一个压缩文件,里面包含的PDF文档只有三页,这意味着它可能聚焦于Java的基础概念,而不是深入的专题讨论。尽管页数不多,但通常这样的面试题集会精炼地涵盖最核心...
从压缩包内的文件名"华为java笔试面试题2014.doc"来看,这应该是一个Microsoft Word文档,里面详细列举了2014年华为Java笔试和面试的题目。这份文档可能分为几个部分,比如: 1. **基础部分**:包括Java语法、类与...
【描述】提到的“后来发现很多面试Java的基本都用这里面的题”暗示了这份资料的重要性,意味着这些题目在Java面试中具有较高的代表性。对于求职者来说,熟悉并理解这些题目的解答思路和答案,能够有效地提高面试通过...
Java提供了多种同步机制,例如`synchronized`关键字、`volatile`关键字以及显式的锁(如`ReentrantLock`)等,以确保线程之间的正确交互和资源共享。 #### 八、总结 Java多线程编程是一项强大的功能,能够让开发者...
`multiThreadDownload`可能是一个包含多线程下载逻辑的源代码包,里面可能有Java类用于创建线程、处理HTTP请求和管理断点续传。`lib`目录则可能存放了项目依赖的第三方库,例如网络通信库,可能用到了Apache ...
【文件名称列表】:“1387131.doc”可能是此次笔试的题目文档,里面可能包含了各种类型的题目,比如选择题、填空题、编程题等,用于测试不同层次的知识掌握。这些题目可能涉及以下几个方面: 1. **基础语法**:考察...
1. **字节码与类加载机制**:Java源代码经过编译器后生成`.class`文件,里面包含字节码,这是JVM能直接理解和执行的指令集。类加载器负责查找并加载这些类文件,分为bootstrap、extension、system和自定义四种加载器...