今天就跟大家说一说如何正确地写出单例模式
有些人认为使用 volatile 的原因是可见性,也就是可以保证线程在本地不会存有 instance 的副本,每次都是去主内存中读取。但其实是不对的。使用 volatile 的主要原因是其另一个特性:禁止指令重排序优化。也就是说,在 volatile 变量的赋值操作后面会有一个内存屏障(生成的汇编代码上),读操作不会被重排序到内存屏障之前。比如上面的例子,取操作必须在执行完 1-2-3 之后或者 1-3-2 之后,不存在执行到 1-3 然后取到值的情况。从「先行发生原则」的角度理解的话,就是对于一个 volatile 变量的写操作都先行发生于后面对这个变量的读操作(这里的“后面”是时间上的先后顺序)。
但是特别注意在 Java 5 以前的版本使用了 volatile 的双检锁还是有问题的。其原因是 Java 5 以前的 JMM (Java 内存模型)是存在缺陷的,即时将变量声明成 volatile 也不能完全避免重排序,主要是 volatile 变量前后的代码仍然存在重排序问题。这个 volatile 屏蔽重排序的问题在 Java 5 中才得以修复,所以在这之后才可以放心使用 volatile。
相信你不会喜欢这种复杂又隐含问题的方式,当然我们有更好的实现线程安全的单例模式的办法。
http://www.meiyuanxing.com/html/197-24545.html
http://www.meiyuanxing.com/html/197-24547.html
http://www.meiyuanxing.com/html/197-24550.html
http://www.wang1314.com/doc/topic-1335808-1.html
http://www.wang1314.com/doc/topic-1335962-1.html
http://blog.eastmoney.com/j1550024695909052/blog_539821921.html
http://blog.eastmoney.com/j1550024695909052/blog_539895736.html
http://blog.eastmoney.com/j1550024695909052/blog_539905373.html
http://blog.eastmoney.com/j1550024695909052/blog_539919798.html
http://site.leshou.com/s/30809308.html
http://site.leshou.com/s/30813848.html
http://site.leshou.com/s/30814719.html
http://shiyou.huangye88.com/xinxi/94334084.html
http://shiyou.huangye88.com/xinxi/94341959.html
http://shiyou.huangye88.com/xinxi/94345339.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg3g.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg3r.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg3w.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg40.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg47.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg4e.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg4l.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg4m.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg4o.html
http://blog.sina.com.cn/s/blog_15df28d4a0102wg4q.html
http://blog.tianya.cn/post-7248581-117861977-1.shtml
http://blog.tianya.cn/post-7248581-117865201-1.shtml
http://www.99inf.com/jinrong/yhbx/963456.html
http://www.99inf.com/jinrong/yhbx/963788.html
http://www.99inf.com/jinrong/yhbx/964188.html
http://www.99inf.com/jinrong/yhbx/964372.html
http://www.99inf.com/jinrong/yhbx/964486.html
http://www.99inf.com/jinrong/yhbx/964526.html
http://www.99inf.com/jinrong/yhbx/964650.html
http://www.99inf.com/jinrong/yhbx/964690.html
http://www.99inf.com/jinrong/yhbx/964758.html
http://www.99inf.com/jinrong/yhbx/964796.html
http://www.talkforex.com/thread-729154-1-1.html
http://www.talkforex.com/thread-729304-1-1.html
http://www.talkforex.com/thread-729795-1-1.html
http://www.talkforex.com/thread-729922-1-1.html
http://www.talkforex.com/thread-730062-1-1.html
http://www.talkforex.com/thread-730110-1-1.html
http://mingjia.cngold.org/expert/1304176/news/c703647.htm
http://mingjia.cngold.org/expert/1304176/news/c703797.htm
http://mingjia.cngold.org/expert/1304176/news/c704016.htm
http://mingjia.cngold.org/expert/1304176/news/c704144.htm
http://mingjia.cngold.org/expert/1304176/news/c704203.htm
http://mingjia.cngold.org/expert/1304176/news/c704312.htm
http://mingjia.cngold.org/expert/1304176/news/c704333.htm
http://mingjia.cngold.org/expert/1304176/news/c704354.htm
http://mingjia.cngold.org/expert/1304176/news/c704367.htm
http://mingjia.cngold.org/expert/1304176/news/c704379.htm
http://bbs.clzg.cn/thread-7050787-1-1.html
http://bbs.clzg.cn/thread-7051113-1-1.html
http://bbs.clzg.cn/thread-7051519-1-1.html
http://bbs.clzg.cn/thread-7051737-1-1.html
http://bbs.laiwu.net/read-htm-tid-5611827-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5612144-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5612437-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5612841-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5613057-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5613264-page-1-1.html
http://bbs.laiwu.net/read-htm-tid-5613293-page-1-1.html
http://bbs.open.qq.com/thread-17159769-1-1.html
http://bbs.open.qq.com/thread-17166541-1-1.html
http://bbs.open.qq.com/thread-17172972-1-1.html
http://bbs.open.qq.com/thread-17179724-1-1.html
http://mt.sohu.com/20160824/n465673679.shtml
http://mt.sohu.com/20160824/n465676531.shtml
http://mt.sohu.com/20160824/n465698855.shtml
http://mt.sohu.com/20160824/n465704554.shtml
http://mt.sohu.com/20160824/n465711486.shtml
http://www.a5.net/thread-21490917-1-1.html
http://www.a5.net/thread-21491816-1-1.html
http://www.docin.com/p1-1715990856.html
http://www.docin.com/p1-1716015612.html
http://www.wangchao.net.cn/user/preview_27118.html
http://www.wangchao.net.cn/user/preview_27265.html
http://www.wangchao.net.cn/hi/detail_176269.html
http://www.wangchao.net.cn/user/preview_27538.html
http://www.wangchao.net.cn/user/preview_27631.html
http://www.wangchao.net.cn/user/preview_27677.html
http://www.wangchao.net.cn/hi/detail_176546.html
http://www.wangchao.net.cn/hi/detail_176557.html
http://www.wangchao.net.cn/user/preview_27708.html
http://www.wangchao.net.cn/hi/detail_176584.html
http://www.wangchao.net.cn/hi/detail_176609.html
http://www.ttx.cn/read-htm-tid-8140459.html
http://www.togv.net/shenghuofuwujiameng/uo8f24xk8ej4bl8vlqkf.htm
http://www.230la.com/news/show-94830.html
http://www.230la.com/news/show-94833.html