fantasy-java
我越发的感觉到你就是我生命中的精灵,翻转跳跃在我那空虚的时空;有人说世界上最美的是春天和爱情,在我眼中有你的地方就是最美的。
BlogJava
首页
新随笔
联系
聚合
管理
随笔-95 评论-31 文章-10 trackbacks-0
再理解单例
1
/** */
/**
2
*
@author
lx
3
* 线程不安全的单例,试想两个线程都进入了if(singleton==null)块里这个时候会初始化两个对象,这只在第一次调用的时候会产生
4
*/
5
public
class
Unsafe_singleton
{
6
7
private
static
Unsafe_singleton singleton;
8
9
private
Unsafe_singleton()
{
10
}
11
12
public
static
Unsafe_singleton getInstance()
{
13
if
(singleton
==
null
)
{
14
singleton
=
new
Unsafe_singleton();
15
}
16
return
singleton;
17
}
18
}
19
public
class
Safe_singleton
{
20
21
private
static
Safe_singleton singleton;
22
23
private
Safe_singleton()
{
24
}
25
26
/** */
/**
27
* 这种写法,非常消耗性能,因为只是第一次进来的时候可能会产生多个实例的情况,后面多线程都不会再进行实例化,那么调用的时候会很降低性能
28
*
@return
29
*/
30
public
static
synchronized
Safe_singleton getInstance()
{
31
if
(singleton
==
null
)
{
32
singleton
=
new
Safe_singleton();
33
}
34
return
singleton;
35
}
36
}
37
/** */
/**
38
*
@author
lx
39
* 这种写法如果在创建和运行时的负担不太繁重,那么这种写法也可以保证多线程安全,每个线程进来都会new 创建此实例。
40
* 这种单例相对于每个线程来说确实是唯一的
41
*/
42
public
class
MoreSafe_singleton
{
43
44
private
static
MoreSafe_singleton singleton
=
new
MoreSafe_singleton();
45
46
public
static
MoreSafe_singleton getInstance()
{
47
return
singleton;
48
}
49
}
50
/** */
/**
51
*
@author
lx
52
* volatile 这个只在JDK1.5以上出现 它确保singleton变量被初始化时,多个线程正确地处理singleton变量
53
* 这种写法如果性能是关注的重点,那么可以大大减少getInstance()的时间消耗
54
*/
55
public
class
VerySafe_singleton
{
56
57
private
volatile
static
VerySafe_singleton singleton;
58
private
VerySafe_singleton()
{}
59
60
public
static
VerySafe_singleton getInstance()
{
61
if
(singleton
==
null
)
{
62
synchronized
(VerySafe_singleton.
class
)
{
63
if
(singleton
==
null
)
{
//
里面为何在加上判断是否为空?
64
//
因为试想如果有三个线程其中一个线程刚刚走出synchronized块,这个时候又进来一个线程,
65
//
如果不判断是否为空,这个又会实例一个变量那么就不是单例了
66
singleton
=
new
VerySafe_singleton();
67
}
68
}
69
}
70
return
singleton;
71
}
72
}
posted on 2010-09-02 15:44
朔望魔刃
阅读(359)
评论(1)
编辑
收藏
所属分类:
设计模式&&数据结构
评论:
#
re: 再理解单例
2010-09-06 12:34 |
xylz
http://www.blogjava.net/xylz/archive/2009/12/18/306622.html
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
节点<一>
存储
"插件"的行为分析
创建模式
你是我的"朋友"
命令模式
命令模式
深入浅出命令模式~
再理解单例
装饰者模式学习
<
2010年9月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Android
flex(1)
git
gradle
IHE&DICOM&HL7的开源框架(1)
java(40)
JavaScript(2)
maven(1)
mybatis
netty(3)
python(3)
spring
svn(1)
即时通信(4)
各种整合
各种配置(9)
数据库(2)
设计模式&&数据结构(11)
随笔档案
2018年8月 (1)
2018年3月 (1)
2018年1月 (1)
2017年12月 (3)
2017年11月 (6)
2017年10月 (1)
2017年8月 (2)
2017年7月 (1)
2017年6月 (1)
2017年5月 (1)
2017年2月 (1)
2016年12月 (3)
2016年10月 (1)
2016年9月 (2)
2015年12月 (1)
2015年7月 (2)
2015年5月 (1)
2015年2月 (3)
2015年1月 (1)
2014年12月 (2)
2014年7月 (1)
2014年5月 (4)
2014年3月 (1)
2013年9月 (6)
2013年8月 (1)
2013年7月 (3)
2013年4月 (1)
2012年7月 (2)
2012年6月 (4)
2012年5月 (2)
2012年1月 (1)
2011年12月 (2)
2011年11月 (2)
2011年9月 (1)
2011年6月 (1)
2011年5月 (1)
2011年3月 (4)
2011年2月 (2)
2010年12月 (2)
2010年9月 (9)
2010年8月 (4)
2010年4月 (1)
2010年3月 (1)
2010年1月 (2)
文章分类
文章(2)
生活(2)
英语学习(3)
诗歌(3)
文章档案
2011年1月 (2)
2010年12月 (3)
2010年11月 (1)
2010年10月 (1)
2010年9月 (2)
2010年8月 (1)
收藏夹
技术文章(2)
娱乐博客
周德东
郭敬明
韩寒
鬼谷女
牛博
其实我是一个程序员
博客大巴~~
很牛的C++程序员
梦幻之旅
达内恩师
雪山飞鹄
高性能网站专家 淘宝 阿里架构师
搜索
最新评论
1. re: jsp通过js按钮导出word小结
下达
--q
2. re: linux安装mysql后root无法登录
谢啦
--galo
3. re: openfire_3.9.3集群配置
我这根本就不显示hazelcast 这个插件包。请教下各位大神。
--openfre
4. re: openfire_3.8.2集群配置[未登录]
hazelcast-cache-config.xml 文件每一台都要配4行ip吗
--wp
5. re: openfire_3.8.2集群配置
评论内容较长,点击标题查看
--朔望魔刃
阅读排行榜
1. linux安装mysql后root无法登录(17828)
2. maven三种打包插件(15113)
3. openfire_3.8.2集群配置(9845)
4. 联想y510p网卡设置(8551)
5. swing日期控件(6839)
评论排行榜
1. openfire_3.8.2集群配置(17)
2. dcm4chee部署安装(3)
3. Java Service Wrapper工具把Java程序转换为Windows服务小结(2)
4. jsp通过js按钮导出word小结(2)
5. XML Schema<一>(1)