Java并发编程:volatile关键字解析
发布时间:2020-12-14 06:38:17 所属栏目:Java 来源:网络整理
导读:转自: p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',宋体,'Myriad Pro',Lato,'Helvetica Neue',Helvetica,Arial,sans-serif" volatile这个关键字可能很
转自: <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',宋体,'Myriad Pro',Lato,'Helvetica Neue',Helvetica,Arial,sans-serif"> <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 以下是本文的目录大纲: <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 一.内存模型的相关概念 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 二.并发编程中的三个概念 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 三.Java内存模型 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 四..深入剖析volatile关键字 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 五.使用volatile关键字的场景 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 若有不正之处请多多谅解,并欢迎批评指正。 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 请尊重作者劳动成果,转载请标明原文链接: <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> http://www.cnblogs.com/dolphin0520/p/3920373.html <h2 style="border:0px; margin:-9px 0px 20px; padding:0px; font-size:24px; font-weight:normal; line-height:36px; font-family:'Microsoft YaHei',sans-serif"> 一.内存模型的相关概念 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。 <p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> 也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。举个简单的例子,比如下面的这段代码: <div style="border:0px; margin:0px; padding:0px; font-size:14px; font-family:'Microsoft YaHei',sans-serif"> <div id="highlighter_430271" class="syntaxhighlighter notranslate java" style="border:0px; margin:1em 0px!important; padding:1px!important; font-size:12px!important; width:100%!important; position:relative!important; overflow-y:hidden!important; overflow-x:auto!important; font-family:Consolas,'Bitstream Vera Sans Mono','Courier New',Courier,monospace!important"> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse; border-spacing:0px; border:0px!important; margin:0px!important; padding:0px!important; font-size:12px!important; width:100%!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; min-height:inherit!important"><tbody style="border:0px!important; margin:0px!important; padding:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important"><tr style="border:0px!important; margin:0px!important; padding:0px!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important"> <td class="gutter" style="border:0px!important; margin:0px!important; padding:0px!important; vertical-align:baseline!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; width:auto!important; font-family:Consolas,monospace!important; min-height:inherit!important; color:rgb(175,175,175)!important"> <div class="line number1 index0 alt2" style="border-width:0px 3px 0px 0px!important; border-right-style:solid!important; border-right-color:rgb(108,226,108)!important; margin:0px!important; padding:0px 0.5em 0px 1em!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; text-align:right!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important; white-space:pre!important"> 1 </td> <td class="code" style="border:0px!important; margin:0px!important; padding:0px!important; vertical-align:baseline!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; width:100%!important; font-family:Consolas,monospace!important; min-height:inherit!important"> <div class="container" style="border:0px!important; margin:0px!important; padding:0px!important; width:auto!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:relative!important; right:auto!important; top:auto!important; vertical-align:baseline!important; min-height:inherit!important"> <div class="line number1 index0 alt2" style="border:0px!important; margin:0px!important; padding:0px 1em!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important; white-space:pre!important"> <code class="java plain" style="border:0px!important; margin:0px!important; padding:0px!important; font-family:Consolas,monospace!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important">i = i + <code class="java value" style="border:0px!important; margin:0px!important; padding:0px!important; font-family:Consolas,monospace!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important; color:rgb(0,153,0)!important">1<code class="java plain" style="border:0px!important; margin:0px!important; padding:0px!important; font-family:Consolas,monospace!important; bottom:auto!important; float:none!important; height:auto!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; min-height:inherit!important">; |

-
-
-
-
-
-
-
?
?
》
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
相关内容