public class Singleton { //利用静态变量来记录Singleton的唯一实例 private static Singleton uniqueInstance; /* * 构造器私有化,只有Singleton类内才可以调用构造器 */ private Singleton(){ } public static Singleton getInstance(){ if(uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; } }
如果有两个线程都要执行这段代码,很有可能会产生两个实例对象
public class Singleton { //利用静态变量来记录Singleton的唯一实例 private static Singleton uniqueInstance; /* * 构造器私有化,只有Singleton类内才可以调用构造器 */ private Singleton(){ } public static synchronized Singleton getInstance(){ if(uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; } }
public class Singleton { /* * 利用静态变量来记录Singleton的唯一实例 * 直接初始化静态变量,这样就可以确保线程安全了 */ private static Singleton uniqueInstance = new Singleton(); /* * 构造器私有化,只有Singleton类内才可以调用构造器 */ private Singleton(){ } public static Singleton getInstance(){ return uniqueInstance; } }
public class Singleton { /* * 利用静态变量来记录Singleton的唯一实例 * volatile 关键字确保:当uniqueInstance变量被初始化成Singleton实例时, * 多个线程正确地处理uniqueInstance变量 * */ private volatile static Singleton uniqueInstance; /* * 构造器私有化,只有Singleton类内才可以调用构造器 */ private Singleton(){ } /* * * 检查实例,如果不存在,就进入同步区域 */ public static Singleton getInstance(){ if(uniqueInstance == null){ synchronized(Singleton.class){ //进入同步区域 if(uniqueInstance == null){ //在检查一次,如果为null,则创建 uniqueInstance = new Singleton(); } } } return uniqueInstance; } }
原文:http://www.cnblogs.com/androidsuperman/p/3679251.html