我们真的了解Volatile 吗?

   
 Volatile,JAVA5之后出现的多线程同步读锁属性修饰符。
让我们看一下一个单例的例子:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->  1  public   class  Singleton{
 2  private   static   volatile  Singleton _instance;  // volatile variable 
 3 
 4  public   static  Singleton getInstance(){
 5 
 6      if (_instance  ==   null ){
 7               synchronized (Singleton. class ){
 8                 if (_instance  ==   null )
 9                _instance  =   new  Singleton();
10              }
11 
12     }
13      return  _instance;
14 
15  }
16 
17 
18  Read more: http: // javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html#ixzz3pfcVVsK1
19 
很明显,我们可以得出两个结论
1 instance只初始化一次
2 instance第一次初始化会比较慢

想想,如果我们不用 volatile ,会有什么结果。每个线程都会有一个线程变量区,彼此并不相通。当有A,B两个线程同时走到第6步,如果线程A得到锁,完成初始化instance之后,线程B同样进入第8步,这样其实是两个instance的。
通过加上volatle,线程B会把instance变量回写到主内存。如果其它线程进来,instance肯定就不是空值了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值