博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:6038 次
发布时间:2019-06-20

本文共 1190 字,大约阅读时间需要 3 分钟。

单例模式:保证一个类只有一个实例,并提供给它一个全局访问点。也就是说实例要么没有,有也只能是一个。

1、最简单的单例模式

class 
Singleon
{
    
private 
static 
Singleon instance;
 
    
private 
Singleon()
    
{ }
 
    
public 
static 
Singleon GetInstance()
    
{
        
if 
(instance ==
null
)
        
{
            
instance =
new 
Singleon();
        
}
        
return 
instance;
    
}
}

 

客户端代码

private 
static 
void 
SingleModeTest()
{
    
Singleon s1 = Singleon.GetInstance();
    
Singleon s2 = Singleon.GetInstance();
    
if 
(s1 == s2)
    
{
        
Console.WriteLine(
"两个对象实例是相等的"
);
    
}
}

 

 缺点:在多线程中还是会创建多个实例的。

 

 2、  多线程下解决被多个实例

class 
SingleonMultiThread
{
    
private 
static 
SingleonMultiThread instance;
    
private 
static 
readonly 
object 
syncRoot =
new 
object
();
 
    
private 
SingleonMultiThread()
    
{ }
 
    
public 
static 
SingleonMultiThread GetInstance()
    
{
        
if 
(instance ==
null
)
        
{
            
lock 
(syncRoot)
            
{
                
if 
(instance ==
null
)
                
{
                    
instance =
new 
SingleonMultiThread();
                
}
            
}
        
}          
        
return 
instance;
    
}
}

 

 

3、采用静态初始化变量的方法

   
sealed 
class 
SingleonStaticInit
{
    
private 
static 
SingleonStaticInit instance =
new 
SingleonStaticInit();
 
    
private 
SingleonStaticInit()
    
{ }
 
    
public 
static 
SingleonStaticInit GetInstance()
    
{          
        
return 
instance;
    
}
}

 

    采用静态初始化方法,不需要显示的编写线程安全代码,即可解决多线程环境下不安全问题。第三中方法最好。

 

 

本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/06/17/2552860.html,如需转载请自行联系原作者

你可能感兴趣的文章
oracle中int与number的区别
查看>>
rsync + inotify 数据实时同步
查看>>
装修除甲醛,这些方法真有那么神奇吗?
查看>>
程序改变了命运,程序生活一天比一天好,对未来也充满了希望
查看>>
SQL Server 2008数据备份与还原(操作篇)
查看>>
cacti监控squid
查看>>
纯CSS无hacks的跨游览器多列布局(转)
查看>>
软件项目开发环境构建之一:整体流程
查看>>
Cacti中rrd文件记录导出
查看>>
RHEL 6 简易搭建samba服务 RHCE
查看>>
yum常用命令
查看>>
一图胜千言 -- SQL Server 基准测试
查看>>
微小说精选
查看>>
我的友情链接
查看>>
Apache安装教程
查看>>
主板典型故障解决方法
查看>>
Hadoop集群搭建步骤
查看>>
更改ubuntu的系统语言
查看>>
jvm参数详解,内存泄露解决
查看>>
升级Windows Management Framework对事件转发的影响
查看>>