单例模式Singleton
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
饿汉模式:
类加载就创建对象,没有多线程的安全问题。
缺点:耗费系统资源,有可能创建了实例却没有使用。
/**
* @Author:Lius
* @Date: 2020/7/22 16:32
*/
public class HungaryMan {
private final static HungaryMan HUNGARY_MAN = new HungaryMan();
private HungaryMan(){}
public static HungaryMan getInstance(){
return HUNGARY_MAN;
}
}
懒汉模式(线程不安全)
当在使用时才去创建实例,有可能发生线程问题。
/**
* @Author:Lius
* @Date: 2020/7/22 16:36
*/
public class LazyManNotSafe {
private static LazyManNotSafe LAZY_MAN_NOT_SAFE;
private LazyManNotSafe(){
System.out.println(Thread.currentThread().getName());
}
public static LazyManNotSafe getLazyManNotSafe() {
if (LAZY_MAN_NOT_SAFE==null){
LAZY_MAN_NOT_SAFE = new LazyManNotSafe();
}
return LAZY_MAN_NOT_SAFE;
}
}
懒汉模式(线程安全)
当在使用时才去创建实例,使用DCL(double check lock)。
/**
* @Author:Lius
* @Date: 2020/7/22 16:42
*/
public class LazyManSafe {
private static LazyManSafe LAZY_MAN_SAFE;
private LazyManSafe(){
System.out.println(Thread.currentThread().getName());
}
public static LazyManSafe getLazyManSafe() {
if (LAZY_MAN_SAFE==null){
synchronized (LazyManSafe.class){
if (LAZY_MAN_SAFE==null) {
LAZY_MAN_SAFE = new LazyManSafe();
}
}
}
return LAZY_MAN_SAFE;
}
}