锁定老帖子 主题:java设计模式全解[1]-单例模式
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-10
在网上找了很久都没有找到详细分析java 设计模式的 后来在网上找到个.net的 看了后决定 对C#的代码进行java本地化(借用下这个词,不知道把C#变java叫做什么) 不敢独享 拿来与大家分析,当作搬家到javaeye 后zmo_xu给大家的见面礼吧,还请各位高手不要耻笑区区在下(文章有自己的理解也有网上原文,如果你发现zmo_xu个文章里面设计到了你的文章的版权 敬请致电 zmo2xu@gmail.com 我会及时处理),好了言归正传
生活中的例子 这里这个方法已经线程安全了但是我们知道对一个方法进行线程安全资源消耗是非常大的我们更倾向于对代码的同步 修改后的代码 java 代码
可以看到 zmo_xu在这里引入了一个Object 的对象key 为什么要引入一个key呢 用instance作为同步关键字不是更好吗!这个当然不行,因为线程同步锁锁定的是地址引用 如果你锁定的是instance的化 当你new的时候 地址引用就会改变.线程锁失效,额你说什么 不new 行不行..不new 不new.....不牛,我只能说这些想的人太牛了,要知道我们这里要保护的代码就是为了实例化,我们一定要牛(new)的拉! 单例模式就说到这里 下一次我们将介绍抽象工厂! javastudy给出的代码补充在这里 !基本上思路是一样的 只是代码实现上有点区别
java 代码
java 代码
这个帖子的代码部分不会再修改了 就此代码部分封帖 ,希望大家 一起继续讨论共同提高 最后附上所有原代码 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-10
莫名的提交失败,受不了,我只能修改点提交再修改,有点受不了的说
|
|
返回顶楼 | |
发表时间:2007-06-10
这里这个方法已经线程安全了但是我们知道对一个方法进行线程安全资源消耗是非常大的我们更倾向于对代码的同步 修改后的代码 java 代码
感觉里面那个synchronized (key) 有画蛇添足之嫌.
关于 Singleton 的线程安全问题,Effective JAVA里面已经讲的很清楚,可以用initialize-on-demand holder class:
java 代码
|
|
返回顶楼 | |
发表时间:2007-06-10
不错,学习中,希望楼主继续,能够学到更多的模式,
也欢迎高手,指出其中的不足,大家一起讨论会更好 |
|
返回顶楼 | |
发表时间:2007-06-10
三种?你是说?能说一下什么意思吗是关系到安全性什么的还是实现上的.我这里并没有说我这里给出了所有的方式,我只是给出了几个经典的常用模式,而且我也还不知道怎么实现延期实例化的实现,望高手赐教
|
|
返回顶楼 | |
发表时间:2007-06-11
学习中,希望持续进行!并且能给点好的实例
|
|
返回顶楼 | |
发表时间:2007-06-11
javastudy 写道 zmo_xu 写道 三种?你是说?能说一下什么意思吗是关系到安全性什么的还是实现上的.我这里并没有说我这里给出了所有的方式,我只是给出了几个经典的常用模式,而且我也还不知道怎么实现延期实例化的实现,望高手赐教
懒汉式,饿汉式,登记式 ....... 到底是什么啦,说清楚点,最好像楼主那样把相应的代码贴出来,谢谢! |
|
返回顶楼 | |
发表时间:2007-06-11
谁给个三种实现方式的链接
|
|
返回顶楼 | |
发表时间:2007-06-11
javastudy 你的懒汉式的和我上面的是一样的啊 我的只是里面加入了线程安全在方法的内部 而你是加载在整个方法上
另外顺便把你的代码引用到我的帖子里面去了 |
|
返回顶楼 | |
发表时间:2007-06-12
hao dongxi
|
|
返回顶楼 | |