一、懒汉式
package com.ed.singleton;
/**
* @author lyz
* @Title: Singleton
* @Description: 懒汉式,newInstance方法加synchronized避免多线程问题
* @date 2019/5/308:20
*/
public class Singleton{
private static Singleton singleton;
private Singleton() {
}
public synchronized static Singleton newInstance() {
if (singleton== null) {
singleton= new Singleton();
}
return singleton;
}
}
二、饿汉式
package com.ed.singleton;
/**
* @author lyz
* @Title: Singleton2
* @Description: 饿汉式,直接初始化对象,可以避免多线程问题
* @date 2019/5/308:22
*/
public class Singleton2 {
private static Singleton2 singleton= new Singleton2();
private Singleton2() {
}
public static Singleton2 newInstance() {
return singleton;
}
}
三、holder单例模式
package com.ed.singleton;
/**
* @author lyz
* @Title: Singleton4
* @Description: 静态内部类holder单例模式,通过内部类的机制使得单例对象可以延迟加载,
* 同时内部类相当于是外部类的静态部分,所以可以通过jvm来保证其线程安全。推荐
* @date 2019/5/88:22
*/
public class Singleton4 {
//1.声明一个静态内部类
//private私有的保证别人不能修改,static保证全局唯一
private static class LazyHolder{
//final防止内部误操作
private static final Singleton4 instance = new Singleton4();
}
//2.私有化默认构造方法,否则代码中随时可以new出来
private Singleton4(){}
//3.同样提供静态方法获取实例
//final确保别人不能覆盖
public static final Singleton4 getInstance(){
return LazyHolder.instance;
}
}