说一说如何正确地写出单例模式

来源:互联网 发布:软件开发员工保密协议 编辑:程序博客网 时间:2024/05/30 05:10

今天就跟大家说一说如何正确地写出单例模式

有些人认为使用 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

0 0
原创粉丝点击