单件模式

一) 什么是单件模式
很简单,使代码只能实例化一个实例的设计模式。怎么做,看个典型样例:

[img]http://dl.iteye.com/upload/attachment/0063/3293/e5286adf-b52d-3037-964f-e9cec416a8f8.png[/img]

如上图,把握3个注意点吧:
1)uniqueInstance 必须用 private static 修饰
2)构造函数必须 private
3)函数getInstance() 必须 static

二)单件模式的多线程处理
显然,以上单件模式的代码不支持多线程。(如何多线程冲突的这里就不多解释了,出问题的就是:if( uniqueInstance == null) { uniqueInstance = new Singleton(); } 这句啦 )
解决方法也很简单,在函数getInstance()前增加线程保护:synchronized 就ok啦

三)多线程单件模式的优化原则
多线程的处理是十分简单,但它也带来性能降低的问题。如何优化? 原则有三:
1)如果性能对应用程序不是很重要,忘了优化吧,就这样吧~~哈哈
2)采用急切创建实例:
[img]http://dl.iteye.com/upload/attachment/0063/3302/69a54b6b-434e-3125-9437-44cd9188a64d.png[/img]
3)三重检查加锁:
[img]http://dl.iteye.com/upload/attachment/0063/3305/2559c2cb-71a8-3de5-bab3-8b7fc5fdd89b.png[/img]

这个方案要特别注意哦:
1、volatile修饰符哦。
2、不适用于1.4及更早的java版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值