1).饿汉式(静态常量)
步骤如下:
①构造器私有化
②类的内部创建对象
③向外部暴露一个静态的公共方法
优点: 这种写法比较简单,就是在类加载的时候就完成实例化,避免了线程同步问题。
public class SingletonTest01 {
public static void main(String[] args){
Singleton1 s1 = Singleton1.getSingleton1();
Singleton1 s2 = Singleton1.getSingleton1();
// s1, s2是同一个实例
System.out.println(s1 == s2);
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
// 饿汉式(静态变量)
class Singleton1{
// 构造器私有化,外部不能new
private Singleton1(){
}
// 本类内部创建对象实例
private final static Singleton1 instance = new Singleton1();
// 向外部暴露一个静态的公共方法
public static Singleton1 getSingleton1(){
return instance;
}
}
2).饿汉式(静态代码块)
public class SingletonTest02 {
public static void main(String[] args){
Singleton1 s1 = Singleton1.getSingleton1();
Singleton1 s2 = Singleton1.getSingleton1();
// s1, s2是同一个实例
System.out.println(s1 == s2);
System.out.println(s1.hashCode()+" "+s2.hashCode());
}
}
// 饿汉式(静态变量)
class Singleton1{
// 构造器私有化,外部不能new
private Singleton1(){
}
private static Singleton1 instance;
// 本类内部静态代码块创建对象实例
static {
System.out.println("===");
instance = new Singleton1();
}
// 向外部暴露一个静态的公共方法
public static Singleton1 getSingleton1(){
return instance;
}
}