单例模式

Posted ycq-qiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

单例模式的关键点

1) 构造方法不对外开放,为private(调用不能用new)

2) 确保单例类只有一个对象,尤其是多线程模式下

3) 通过静态方法或枚举返回单例对象

4) 确保单例类在反序列化是不会重新创建新的对象

单例模式的实现方式

1) 饿汉式

public class Singleton1

/*

* 饿汉式是在声明的时候就已经初始化Singleton1,确保了对象

的唯一性

*

* 声明的时候就初始化对象会浪费不必要的资源

* */

private static Singleton1 instance = new Singleton1();

private Singleton1()

// 通过静态方法或枚举返回单例对象

public Singleton1 getInstance()

return instance;

2) 懒汉式

public class Singleton2

private static Singleton2 instance;private Singleton2()

/*

* getInstance 添加了synchronized 关键字,,也就是说

getInstance 是一个同步方法,

* 这就是懒汉式在多线程中保持唯一性的方式

*

* 懒汉式存在的问题是,即是instance已经被创建,每次调用

getInstance方法还是会同步,这样就会浪费一些不必要的资源

* */

public static synchronized Singleton2 getInstance()

if (instance == null)

instance = new Singleton2();

return instance;

双重检查

线程安全式中,同步了整个getInstance方法才保证了线程安全,会浪

费很多性能。于是我们可以使用双重检查式,它将只在初次创建实例的

时候实现同步。(了解锁优化的同学可以理解为减少锁的颗粒度)

public class SingletonLH

private static SingletonLH singleton = null;

private SingletonLH()

public static SingletonLH getSingleton1() throws

InterruptedException

if (singleton == null)

synchronized (SingletonLH.class)

if (singleton == null)

singleton = new

SingletonLH();

return singleton;

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式(单例设计模式)详解

Java模式设计之单例模式(二)

单例模式(饿汉式单例模式与懒汉式单例模式)

单例模式

单例模式

设计模式之单例模式