在写程序的过程当中,创建一个单例,然后static volatile 实例的时候volatile这个关键字的含义有点不知其含义。
总的来说告诉编译器这个volatile修饰的变量是易变的,当需要读取这个变量的值时,应该从内存中读取,而不是从寄存器中读取。
主要作用:
会强制变量修改的值立即存储到内存当中;两个线程A,B同时修改volatile变量的时候,两个线程都会首先从内存中读取值到寄存器当中,B修改变量时,会使A的寄存器中的值变无效;当A去修改时发现自己缓存的内容无效,会等待主内存的值更新以后再去读取新的值到寄存器当中重新计算。
非volatile 例子: int count = 1 count ++
当多线程的时候,如果线程1执行上述内容,线程2也同样执行上述内容。线程1、2都从内存读到值1,当线程1去执行+1操作的时候首先从内存读取缓存到寄存器当中,寄存器中的值+1变成2再去更新主内存地址的值,而线程2缓存的值还是刚开始读取到的1的值,+1等于2最终两个线程完成以后发现值是2而不是3。
参考:http://www.importnew.com/18126.html
http://blog.csdn.net/suhuaiqiang_janlay/article/details/5942659