单例

来源:互联网 发布:钢铁雄心3 知乎 编辑:程序博客网 时间:2024/04/29 21:43

单例


单例就是该类只能返回一个实例。

单例所具备的特点:

1.私有化的构造函数

2.私有的静态的全局变量

3.公有的静态的方法

单例分为懒汉式、饿汉式和双层锁式

所谓懒汉式饿汉式的区别,是在与建立单例对象的时间的不同。

懒汉式是在你真正用到的时候才去建这个单例对象:


比如:有个单例对象


public class Singleton{     private Singleton(){}    private static Singleton singleton = null;  //不建立对象    public static synchronized Singleton getInstance(){             if(singleton == null) {        //先判断是否为空                                 singleton = new Singleton ();  //懒汉式做法              }             return singleton ;     }}

 “饿汉式是在不管你用的用不上,一开始就建立这个单例对象:比如:有个单例对象

public class Singleton{     private Singleton(){}    private static Singleton singleton = new Singleton();  //建立对象    public static Singleton getInstance(){        return singleton ;//直接返回单例对象    }}


它有以下几个要素:

· 私有的构造方法

· 指向自己实例的私有静态引用

· 以自己实例为返回值的静态的公有的方法

 

线程安全


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

参考:


通过双重判断来保证单列设计模式在多线程中的安全性,

并且它在性能方面提高了很多。

synchronized在方法上加锁 (同步锁)

synchronized在代码块内部加锁 (同步代码块)

synchronized(同步锁)

使用synchronized如何解决线程安全的问题?

1.synchronized在方法上加锁

2.synchronized在代码块内部加锁

1.懒汉  2.饿汉  3.双重判断




原创粉丝点击