`
caicai1230231
  • 浏览: 22969 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

我们真的了解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肯定就不是空值了

分享到:
评论

相关推荐

    你了解C语言中的关键字volatile吗?

    我们在学习C语言的32个关键字时,大家都不太注意volatile这个关键字,volatile是一个类型修饰符。volatile的中文意思是“易变的”。那么在程序中我们在什么情况下才使用他呢?我们在分析内核时经常看到这个关键字的...

    volatile相关理论知识

    初步认识 Volatile、从硬件层面了解可见性的本质、JMM、HappenBefore;初步认识 Volatile、从硬件层面了解可见性的本质、JMM、HappenBefore;

    深入了解java并发的volatile关键字的底层设计原理.docx

    深入了解java并发的volatile关键字的底层设计原理.docx

    简单了解java volatile关键字实现的原理

    主要介绍了简单了解volatile关键字实现的原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    简单了解java volatile

    主要介绍了了解java volatile,volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。下面我们来一起学习一下吧

    并发编程基础知识,java内存模型及多线程、volatile

    因此,我们需要在深⼊了解并⾏机制的前提下,再定义⼀种规则, 来保证多个线程间可以有效地、正确地协同⼯作。⽽JMM就是为此⽽⽣的。 ● JMM的关键技术点都是围绕着多线程的原⼦性、可⻅性和有序性来创建的。所以,...

    java多线程编程之慎重使用volatile关键字

    volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,下面看一下为什么要慎重使用volatile关键字

    深入了解Java中Volatile关键字

    主要介绍了Java中Volatile关键字的相关知识,文章讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    招银网络java科技笔试题-mianjing:mianjing

    jdk了解么? hashmap底层?扩容实现?多线程问题? concurrentHashMap?读写操作实现?锁机制?实现维持map大小的LRU算法? volatile关键字?volatile修饰数组?修饰对象? 找两条链表公共节点? 如何判断循环链表?...

    Java线程之线程同步synchronized和volatile详解

    主要介绍了Java线程之线程同步synchronized和volatile详解,具有一定参考价值,需要的朋友可以了解下。

    java同步之volatile解析

    volatile可以说是Java虚拟机提供的最轻量级的同步机制了,了解volatile的语义对理解多线程的特性具有很重要的意义,下面小编带大家一起学习一下

    Java开发中的volatile你必须要了解一下

    主要给大家介绍了关于Java开发中volatile的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java多线程并发编程 Volatile关键字

    volatile 关键字是一个神秘的关键字,也许在 J2EE 上的 JAVA 程序员会了解多一点,但在 Android 上的 JAVA 程序员大多不了解这个关键字。只要稍了解不当就好容易导致一些并发上的错误发生,例如好多人把 volatile ...

    【2018最新最详细】并发多线程教程

    6.你以为你真的了解final吗? 7.三大性质总结:原子性、可见性以及有序性 8.初识Lock与AbstractQueuedSynchronizer(AQS) 9.深入理解AbstractQueuedSynchronizer(AQS) 10.彻底理解ReentrantLock 11.深入理解读写锁...

    Java并发编程:volatile关键字详细解析

    主要介绍了Java并发编程:volatile关键字详细解析,对学习volatile关键字有一定的认识,有需要的可以了解一下。

    Java中Volatile关键字详解及代码示例

    主要介绍了Java中Volatile关键字详解及代码示例,分为两个部分,第一部分介绍了Volatile关键字的基本概念等内容,第二部分分享了实例代码,具有一定参考价值,需要的朋友可以了解下。

    【并发编程】volatile的原理我好像又懂了.pdf

    初学者:对计算机科学或编程有一定了解,但尚未接触过并发编程的开发者。 中级开发者:已经具备一定的编程经验,希望提高程序性能或学习多线程开发的人员。 高级开发者:需要深入理解并发编程原理,解决复杂并发问题...

    详细分析java并发之volatile关键字

    主要介绍了java并发之volatile关键字的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    Java并发编程volatile关键字的作用

    主要介绍了Java并发编程volatile关键字的作用,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    深入分析java并发编程中volatile的实现原理

    主要介绍了深入分析java并发编程中Volatile的实现原理,涉及Volatile的官方定义,实现原理,使用优化等相关内容,具有一定参考价值,需要的朋友可以了解下。

Global site tag (gtag.js) - Google Analytics