public class Singleton {
//利用一个静态变量来记录Singleton类的唯一实例
private static Singleton uniqueInstance;
//把构造器声明为私有,没有公开的构造器,避免了产生多个实例。需要获得实例时,调用Singleton.getInstance().
private Singleton() {
}
//静态方法,是一个“类”的方法。引用一个静态方法,只需要使用类名,不需要对象名
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
//增加synchronzed关键字到该方法中,迫使每个线程进入这个方法之前,要先等候别的线程离开该方法。
public static synchronzed Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
public class Singleton {
//在静态初始器中定创建单件。这段代码保证了线程安全
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
//已经有了实例,直接使用
return uniqueInstance;
}
}public class Singleton {
//volatile关键字确保当uniqueInstance变量被初始化成Singleton实例时,多个线程正确的处理该变量
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
//检查实例,如果不存在,就不进入
if (uniqueInstance == null) {
synchronized (Singleton.class) {
//进入区块后再检查一次。如果仍是null,才创建实例。
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}《Head First 设计模式》学习笔记——单件模式,布布扣,bubuko.com
原文:http://blog.csdn.net/huaxi1902/article/details/27987107