-
volatile的作用到底是什麽? 0
用volatile修飾的變量,其作用到底是什麽?
我在網上搜了很多的文章,都看不懂.
誰能幫我解釋下,然後用簡單的代碼做一下說明????2012年9月05日 11:52
3个答案 按时间排序 按投票排序
-
定义一个变量,我们期望的是,变量位于内存(main memory)中,对变量的访问也是直接操作内存。
但实际上,编译器会做出优化,比如将变量放在cache中,但程序访问变量时,也是从cache中读取。
于是,如果多个线程操作同一变量,可能某些线程读到的是错误的旧值。
因此,使用volatile,告知使用者,“我是易变的,你要从源头去获取权威的数据”。2012年9月06日 13:00
-
这是关于Java内存模型(JSR133规范)
可以现在jsr133深入研究http://today.java.net/pub/a/today/2004/04/13/JSR133.html
http://www.cnblogs.com/aigongsi/archive/2012/04/26/2470296.html
http://developer.51cto.com/art/200906/131393.htm
http://sakyone.iteye.com/blog/6680912012年9月05日 12:46
-
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
这里面有 例子介绍 ,其实你可以去看 concurrent 包里面 ,也有 Volatile 的使用,用的还挺多!
http://www.ibm.com/developerworks/cn/java/j-jtp06197.html2012年9月05日 12:02
相关推荐
本篇文章将深入探讨volatile关键字的作用,并结合GD32F303单片机的使用场景,来阐述它在实际开发中的应用。 首先,volatile关键字是C/C++语言中的一个修饰符,它的主要功能是告诉编译器,该变量的值可能会在编译器...
* 下面的函数有什么错误:intsquare(volatile int*ptr){return *ptrptr;}答案是这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:intsquare...
### 单片机C语言中volatile的作用 在探讨单片机C语言中`volatile`关键字的作用之前,我们首先需要理解`volatile`的基本概念及其应用场景。`volatile`是一个用于声明变量的关键字,在C语言中,使用`volatile`修饰的...
volatile 变量的作用是防止编译器对代码进行优化,确保每次读取变量的值都是最新的。比如,在上面的示例程序中,如果不使用 volatile,编译器可能会将四条语句优化成一条,忽略前三条语句。但是,如果使用 volatile...
在多线程或嵌入式编程中,volatile的作用尤为重要。 1. Volatile与常量的区别: - 常量(如5或"abc")是放在内存的只读区域,不能被修改。 - Volatile变量则是存储在普通内存中,可以被其他线程或外部设备修改。...
总之,`volatile`关键字在Java中起到了保证并发环境下变量可见性和有序性的作用,但并不能保证操作的原子性。在设计多线程程序时,理解`volatile`的工作原理及其限制对于正确地处理并发问题至关重要。
【Java面试题】volatile的作用
除了`volatile`之外,`const`关键字在嵌入式编程中也有着重要的作用。通过合理使用`const`,不仅可以提高代码的可读性,还能帮助优化器生成更加高效、安全的代码。 #### 基本概念 `const`关键字用于声明一个变量或...
### volatile的作用 在计算机编程领域,`volatile`关键字主要用于指示编译器某个变量可能会被外部因素(如其他线程或硬件设备)改变。这在多线程编程、并发控制及硬件交互等场景下尤为重要。 #### 标题和描述中所...
`volatile`和`synchronized`都是Java中的关键字,虽然它们都可以用于处理多线程同步问题,但作用机制不同。`volatile`确保了变量的修改对于其他线程是可见的,而`synchronized`则提供了互斥访问,保证同一时间只有...
### Volatile 在嵌入式系统中的作用 #### 一、Volatile 的基本概念与作用 在编程语言中,`volatile` 是一个关键字,主要用于声明一个变量可能会被外部环境(如其他线程或硬件中断)不可预测地改变。当一个变量被...
这两个关键字在理解程序的行为、内存模型以及多线程编程中起到至关重要的作用。在此,我们将深入探讨`const`和`volatile`的含义、用法及其在实际编程中的应用。 `const`关键字: 1. `const`的基本概念:`const`用来...
这个关键字的主要作用是告诉编译器不要对这个变量进行优化,每次使用时都需要从内存中获取最新值,而不是依赖于寄存器中的备份。 在Java中,volatile变量主要有以下两个特点: 1. **可见性**:当一个线程修改了...
#### 一、volatile的基本概念与作用 `volatile`关键字在编程语言中扮演着重要的角色,尤其是在处理并发编程、嵌入式系统开发等领域。`volatile`的中文含义通常被翻译为“易变的”,但根据描述中的观点,将其理解为...
ZigBee NV(Non-Volatile Memory)操作基础实验主要涉及的是ZigBee网络中的数据存储技术。在ZigBee通信协议栈中,非易失性存储器用于保存设备的重要配置信息和状态,即使在电源断开后也能保持这些信息。这种存储方式...
Volatile是C语言中的一个类型修饰符,用于告诉编译器该变量可能会在程序的控制之外被改变,从而...通过以上知识点,我们可以了解到volatile在保证程序正确性方面的关键作用,以及如何在实际编程中正确使用volatile。
掌握这两个关键字不仅能够帮助开发者写出更加高效和可靠的代码,还能够在处理嵌入式系统等特定领域时发挥关键作用。 #### `volatile`详解 `volatile`关键字主要用于指示编译器不要对声明为`volatile`的变量进行优化...