HeadFirst design pattern笔记-单例模式

来源:互联网 发布:淘宝猫粮成分分析 编辑:程序博客网 时间:2024/06/08 11:05

单例模式:确保一个类只有一个实例,并提供一个全局访问点。单例模式的构造方法是私有的,所以不能从外部创建这个类,这样很自然想到定义静态方法返回这个类的实例的方式。

实现的方式:

1.线程同步方式:

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


缺点:实际上只有第一次创建此对象时才需要进行线程同步,对象创建后同步就没有了意义。


2.加载时创建

public class Singleton {public static  Singleton getInstance() {return uniquesInstance;}private Singleton() {}private static Singleton uniquesInstance = new Singleton();}
JVM在加载这个类时马上创建一个唯一的实例,JVM保证在任何线程访问uniqueInstance静态变量之前一定先创建此实例。


3.双重检查加锁的方式

public class Singleton {public static  Singleton getInstance() {if (null == uniquesInstance) {synchronized (this) {if (null == uniquesInstance) {uniquesInstance = new Singleton();}}}return uniquesInstance;}private Singleton() {}private volatile static Singleton uniquesInstance;}

如果实例没有创建才进行同步,而不是第一种方式的每次都同步,此方式只需要同步一次。双重检查加锁适用于JAVA5及以上的版本

原创粉丝点击