您的位置:首页 > 其它

线程安全的单例模式

2015-10-16 10:29 316 查看
单例模式是一种比较简单的模式,确保某一个类在内存中只有一个实例,而且自行实例化并向整个系统提供这个实例,也就是说在这个系统中这个类只能实例化一个对象。比如web页面的计数器。

线程安全的单例模式

/*
这是先初始化对象,称为饿汉式
Single类一进内存,就已经生成对象
线程安全的
*/

class Single
{
private static Single single=new Single();
private Single()
{
}
public static Single getInstance()
{
return single;
}

public void doSomething()
{
}
}
线程不安全的单例模式

/*
这是延迟加载对象,称为懒汉式
Single类进内存,对象还没有存在,只是调用getInstance()方法时候才建立对象。
线程不安全的
*/

class Single
{
private  static Single single=null;
private Single()
{
}
public static Single getInstance()
{
if(single==null)
{
single=new Single();
}
return single;
}

public void doSomething()
{
}
}


使用synchronized关键字使得线程安全,这样写会使得程序的执行效率变低,因为每一次获取实例时候都会判断是否有锁然后加锁~

class Single
{
private  static Single single=null;
private Single()
{
}
//synchronized关键字用于线程同步,加锁
public static Single synchronized getInstance()
{
if(single==null)
{
single=new Single();
}
return single;
}

public void doSomething()
{
}
}
使用两次判断,避免每次getInstance()方法加锁,所消耗的资源。

class Single
{
    private  static Single single=null;
    private Single()
    {
    }
    //synchronized关键字用于线程同步
    public static Single  getInstance()
    {
        if(single==null)
        {
            synchronized(Single.class)
            {
                if(single==null)
                {
                    single=new Single();
                }
            }
        }
        return single;
    }

    public void doSomething()
    {
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: