饿汉式(类加载时立即初始化,线程安全,推荐使用)
package pack;
/**
* 单例模式:饿汉式
* @author fanshoujun
*
*/
public class Singleton {
private Singleton() {
}
private static final Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
饿汉式(第一次使用时初始化)
package pack;
/**
* 单例模式:懒汉式
* 为解决线程安全问题,在方法上增加synchronized关键字
* @author fanshoujun
*
*/
public class Singleton {
private Singleton() {
}
private static Singleton singleton = null;
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
饿汉式(第一次使用时初始化)
package pack;
/**
* 单例模式:懒汉式
* 为解决线程安全问题,方法内增加双重检查锁定
* @author fanshoujun
*
*/
public class Singleton {
private Singleton() {
}
private static Singleton singleton = null;
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
饿汉式(第一次使用时初始化,推荐使用)
package pack2;
/**
* 单例模式:懒汉式
* 为解决线程安全问题,使用静态内部类的方式
* @author fanshoujun
*
*/
public class Singleton {
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}