线程安全的单例模式

来源:互联网 发布:macbook怎么下载软件 编辑:程序博客网 时间:2024/06/16 03:11

单例模式是一种比较简单的模式,确保某一个类在内存中只有一个实例,而且自行实例化并向整个系统提供这个实例,也就是说在这个系统中这个类只能实例化一个对象。比如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()    {    }}




0 0
原创粉丝点击