饿汉式
将对象的实现提前准备好,对象指向的内存只能有一个。
public class Singlection1 {
/**
* 构造方法私有
*/
private Singlection1(){
}
/**
* 饿汉式单例实现
* 将对象的实现提前准备好
*/
private static final Singlection1 single1 = new Singlection1() ;
/**
* 静态工厂
*/
public static Singlection1 getInstance() {
return single1;
}
}
public class Test {
public static void main(String[] args) {
Singlection1 single1 = Singlection1.getInstance();
Singlection1 single2 = Singlection1.getInstance();
System.out.println("饿汉式对象指向的内存是同一个:" + (single1==single2));
}
}
输出:饿汉式对象指向的内存是同一个:true
懒汉式:只在第一次调用时实例化,后面不会再实例化
public class Singlection2 {
/**
* 构造方法私有
*/
private Singlection2(){
}
/**
* 懒汉式单例实现 只在第一次调用时实例化,后面不会再实例化
*/
private static Singlection2 single;
/**
* 静态工厂
* synchronized 线程同步
*/
public synchronized static Singlection2 getInstance() {
if(single == null){
single = new Singlection2();
}
return single;
}
}
public class Test {
public static void main(String[] args) {
Singlection2 single3 = Singlection2.getInstance();
Singlection2 single4 = Singlection2.getInstance();
System.out.println("懒汉式对象指向的内存是同一个:" + (single3==single4));
}
}
输出:懒汉式对象指向的内存是同一个:true