volatile
答:volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。volatile读的内存语义如下:当读一个volatile变量时,JMM会把该...
答:volatile是易变的,不稳定的意思,volatile是关键字,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问。volatile 关键字告诉编译器该变量是随时...
答:volatile关键字是否能保证线程安全 任何被volatile修饰的变量,都不拷贝副本到工作内存,任何修改都及时写在主存。因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的。什么意思呢?假如有这样的代码:Java代码 public class VolatileTest { public volatile int...
答:要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值...
答:最近有同事提到了volatile关键字,所以感兴趣就上网去学习了下,但是在网上看的云里雾里的,因为很多帖子都是明确说明volatile的定义了,然后就各种给你讲例子它应该如何应用到多线程中使用,我个人也写了例子,程序运行没有实现出他们多线程的效果。不过看了很多帖子也花费了很多时间,就做一个总结吧。1...
答:因为volatile并不能保证其原子性,他只保证了某一个线程对他修改以后其他线程可见,尤其是当多个线程对一个变量自增活自减时会导致变量出错。参照《深入理解java虚拟机》一书,volatile运用在以下场景:1>运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。2>变量不需要与其他的状态...
答:多线程的时候会改变。程序运行到volatile定义的变量时,很显然,程序运行在当段程序中,这几乎是在说废话了。那么,我们也许应当可以认为,如果volatile定义的变量正在我们编写的函数中,直到函数执行完毕,volatile定义的变量的值应该应该只有我们这个函数才会使之改变。也就是volatile是否被改变是受我们的函数...
答:四.深入剖析volatile关键字 在前面讲述了很多东西,其实都是为讲述volatile关键字作铺垫,那么接下来我们就进入主题。 1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量...
答:static 和 Volatile 的区别有:在英语单词中 (1)在英语里static的意思是:01adj.静止的;静电的;不变的;[物]静力的。The number of young people obtaining qualifications has remained static ordecreased .获得资格证的年轻人数量一直维持不变或出现下降。02n.静电;静力学;[物]静电(干扰);争吵...
答:更重要的是,synchronized还会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中,从而保证了操作的内存可见性,同时也使得先获得这个锁的线程的所有操作,都happens-before于随后获得这个锁的线程的操作。3、volatile关键字解决的是内存可见性的问题,会使得所有对volatile变量的读写都会...
网友评论:
边邢13443713648:
volatile - 百科
54260通采
: volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等.由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化.遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问.volatile的本意是“易变的”,不过翻译成“直接存取原始内存地址”更为合适.“易变”是因为外在因素引起的,象多线程,中断等,并不是因为用volatile修饰了的变量就是“易变”了,假如没有外因,即使用volatile定义,它也不会变化.
边邢13443713648:
C语言中关键字volatile是什么意思 -
54260通采
: volatile的本意是一般有两种说法.1.“暂态的 2.“易变的.这两种说法都有可行.一个定义为volatile的变量是说这变量可能会被意想不到的改变,这样,编译器就不会去假设这个变量的值了.优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份. www.okeycar.com
边邢13443713648:
"volatile"是什么意思 -
54260通采
: 形容词adj. 易变的,不稳定的
边邢13443713648:
关键字volatile有什么含义?并给出三个不同的例子 -
54260通采
:[答案] 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile变量的...
边邢13443713648:
java 里面volatile什么意思啊 -
54260通采
: Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值.Java语言规范...
边邢13443713648:
volatile是什么意思 -
54260通采
: 如果是内存单元地址,就不加volatile,编译器会对赋值语句做优化 比如char *p;那么如果连续写下面两条语句*p = 15;*p = 20;的话,第一条赋值语句就会被优化掉(被去掉了) 如果是硬件地址,就加volatile,编译器不会做优化
边邢13443713648:
关键字volatile有什么含意 -
54260通采
: 详解C中volatile关键字 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器.
边邢13443713648:
java的volatile是什么意思 -
54260通采
: 一般的,如果多个线程协作存、取某个变量时,一般需要用到synchronized关键字进行同步操作,如: public class MyTestThread extends MyTest implements Runnable {private boolean _done = false;public synchronized boolean getDone(){...
边邢13443713648:
java中的volatile关键是什么作用?怎么使它 -
54260通采
: volatile关键字有什么用? 恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法;看如下三句get代码: int i1; int geti1() {return i1;} volatile int i2; int geti2() {return i2;} int i3...