饿汉模式
优点:线程安全,调用效率较高
缺点:不能懒加载
实现方式
/**
* 优点:线程安全,调用效率较高
* 缺点:不能懒加载
*/
public class Sinleton {
//1.私有化构造器
private Sinleton() {
}
//2.立即加载对象
private static Sinleton instance = new Sinleton();
//3.提供访问接口
public static Sinleton getInstance(){
return instance;
}
}
测试
/**
* className:Test
*
* @author:zjl
* @version:0.1
* @date:2020/8/1920:08
* @since:jdk1.8
*/
public class Test {
public static void main(String[] args) {
Sinleton instance0 = Sinleton.getInstance();
Sinleton instance1 = Sinleton.getInstance();
Sinleton instance2 = Sinleton.getInstance();
System.out.println("instance0和instance1是否为同一对象:"+instance0.equals(instance1));
System.out.println("instance0和instance2是否为同一对象:"+instance0.equals(instance2));
}
}
测试结果
懒汉模式
优点:懒加载,避免了资源浪费
缺点:通过synchronized实现同步,并发效率低
实现方式
/**
* 优点:懒加载,避免了资源浪费
* 缺点:通过synchronized实现同步,并发效率低
*/
public class Sinleton {
//1.私有化构造器
private Sinleton() {
}
private static Sinleton instance = null;
//2.提供访问接口
public synchronized static Sinleton getInstance(){ //synchronized同步
if(instance==null) //3.第一次调用时候加载实例对象
instance = new Sinleton();
return instance;
}
}
测试
/**
* className:Test
*
* @author:zjl
* @version:0.1
* @date:2020/8/1920:08
* @since:jdk1.8
*/
public class Test {
public static void main(String[] args) {
Sinleton instance0 = Sinleton.getInstance();
Sinleton instance1 = Sinleton.getInstance();
Sinleton instance2 = Sinleton.getInstance();
System.out.println("instance0和instance1是否为同一对象:"+instance0.equals(instance1));
System.out.println("instance0和instance2是否为同一对象:"+instance0.equals(instance2));
}
}
测试结果