书写步骤:
1.构造方法私有化
2.类的内部提供好一个实例化好的对象
3.返回其对象
核心操作:
singleton = new Singleton ();
其语句操作的内容:
1.在堆上分配空间
2.属性初始化
3.引用指向对象(singleton已经不为空)
有可能顺序为1-3-2,所以引入两次检查及volatile关键字,均保证程序的顺序性及线程的安全性
懒汉式双重加锁单例模式:
代码如下:
package collection;
class Singleton {
private String str;
//禁止指令重排,不管多少线程拿到了singleton对象,一定是完全初始化好的对象
private static volatile Singleton singleton;
private Singleton() {
str = "world";
}
public String getStr() {
return str;
}
public static Singleton getInstance() {
if (singleton == null) {//第一次检查
synchronized (Singleton.class) {//拿到的对象只有一个
if (singleton == null) {//第二次检查
singleton = new Singleton ();
}
}
}
return singleton;
}
}