volatile
想必大家平时都见过volatile关键字,可是你知道什么时候需要使用volatile关键字吗? 这段程序编译时,如果编译器发现程序始终没有企图改变a的值,那它可能就会优化这段代码,变成while(true)的死循环使得程序执行的更快,然而编译器有时候也会做过度优化,它有时候可能没有意识到程序会改变a的值,却做了这种优化导致程序没有产生预期的行为。 这里为了产生预期的行为,需要阻止编译器做这种优化,可以使用volatile关键字修饰。 volatile关键字和const关键字相对应,const关键字告诉编译器其修饰的变量是只读的,编译器根据只读属性做一些操作,而volatile关键字告诉编译器其修饰的变量是易变的,同理编译器根据易变属性也会做一些操作
volatile的意思是”易变的”,因为访问寄存器比访问内存要快得多, 所以编译器一般都会做减少存取内存的优化。volatile 这个关键字会提醒编译器,它声明的变量随时可能发生变化(在外部被修改), 因此,与该变量相关的代码不要进行编译优化,以免出错。 声明一个指针,指向volatile型的内存(即指针指向的内存中的变量随时可能变化): 声明一个volatile指针,指向volatile内存(即指针和指针所指物都随机可能变化): volatile在声明上的使用和const是一样的
喜欢是一件细水流长的事,是永不疲惫的双向奔赴~! synchronized关键字 synchronizedJava语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在《深入理解Java虚拟机》中,有这样一段话:synchronized关键字在需要原子性、可 volatile关键字 volatile本文就围绕volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保障的等。volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的
