volatile和不加volatile的区别

http://blog.chinaunix.net/uid-25100840-id-3067899.html

对于一个地址,如果加上了volatile参数,这个地址也就不会经过编译器优化,也就是说这个地址就是真实的地址,但是,如果不加上volatile的话,这个地址可能被编译器优化,这个例子就是,关于优化,什么优化,对于这个例子而言,这个地址就是不是硬件本身的地址,而是驻足与内存中的地址(导致了后面访问这个地址的时候,数据输出为想要的地址。),所以才有了结果不一样的情况出现。

时间: 2024-09-27 18:48:19

volatile和不加volatile的区别的相关文章

java 里面保留字volatile及其与synchronized的区别

最近在读java并发编程相关的书籍,蚂蚁金服团队的杰作,可以好好把java并发相关的内容好好研究一下 要理解volatile和synchronized的区别,首先还是需要来理解下java的内存模型 java内存模型 java中,线程之间的通信是通过共享内存的方式,存储在堆中的实例域,静态域以及数组元素都可以在线程间通信.java内存模型控制一个线程对共享变量的改变何时对另一个线程可见. 线程间的共享变量存在主内存中,而对于每一个线程,都有一个私有的工作内存.工作内存是个虚拟的概念,涵盖了缓存,写

[CareerCup] 13.5 Volatile Keyword 关键字volatile

13.5 What is the significance of the keyword "volatile" in C 这道题考察我们对于关键字volatile的理解,顾名思义,volatile有易变的易挥发的意思,在C/C++里,表示告知编译器某个变量可能会由程序外部改变,比如操作系统,硬件或者其他的线程.由于变量会由无法预期的改变,所有编译器每次都需要从内存中读取变量值.我们可以如下定义一个整型变量为volatile: int volatile x; volatile int x

onclick时间加return和不加return的区别

JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置.而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是false时,将中断操作.而直接执行时(不用return).将不会对window.event.returnvalue进行设置所以会默认地继续执行操作详细说明如下:例如:当在 <a href="abc.htm" onclick="return add_onclick()&quo

Java中主类中定义方法加static和不加static的区别

Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量被static修饰后的所有类的共享属性 b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化 4.This关键字的用法 this:是当前类的对象引用.简单的记,它就代表当前

set @sql=N&#39;q&#39;,这里的N是什么意思,加与不加有什么区别

用来支持UNICODE字符的,不加的话,如果sql语句中有Unicode字符会认不出来 set @sql=N'q',这里的N是什么意思,加与不加有什么区别 原文地址:https://www.cnblogs.com/xyao1/p/8549289.html

函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别

##比较两个数大小 #有参函数!!! def compare(s,t): if s > t: print(s) else: print(t) f=compare compare(1000,30) f(1800,30) """有几个参数传几个参数,形参对应实参,一个也不能少""" ''' 2.函数名加括号与不加括号的区别: 函数名加括号与不加括号的区别: --在这个函数中,return返回的是inner, 内部其实是返回inner函数的运行结

new一个对象后面加括号与不加括号的区别

new一个对象后面加括号与不加括号的区别 ? 加括号与不加的区别 (1)加括号 ??? 1. 若括号为空,即无实参项,那么理解为调用默认构造函数: ??? 2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或 复合默认构造函数. (2)不加括号 调用默认构造函数,或复合默认构造函数. 默认构造函数 与 复合默认构造函数的区别 默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数.默认构造函数一般参数为空. 复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的

synchronized和volatile的使用方法以及区别

先看看下面的例子: public class ThreadTest { public static void main(String[] args) { final Counter counter = new Counter(); for (int i = 0; i < 1000; i++) { new Thread(new Runnable() { @Override public void run() { counter.inc(); } }).start(); } System.out.p

volatile与synchronized有什么区别?

下列说法正确的是()? A.我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程 B.一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源 C.synchronized可以解决可见性问题,volatile可以解决原子性问题 D.ThreadLocal用于创建线程的本地变量