1、什么是单例模式?
单例模式就是一个类只会有一个实例。
2、单例模式实现方式
2.1 懒汉模式
/**
* 保证该类只会生成一个类实例
*/
public class LayzSinglePattern {
private static LayzSinglePattern instance ;
/**
* 静态内部类,静态内部类是第一次被使用的时候加载的
*/
private static class LayzHolder {
private static final LayzSinglePattern INSTANCE = new LayzSinglePattern();
}
private LayzSinglePattern(){
//do something
}
/**
* 线程不安全的
* @return
*/
public static LayzSinglePattern getInstance() {
if (null == instance) {
instance = new LayzSinglePattern();
}
return instance;
}
/**
* 线程安全的
* @return
*/
public static synchronized LayzSinglePattern getInatanceSecurity() {
if (null == instance) {
instance = new LayzSinglePattern();
}
return instance;
}
/**
* 双重锁保证线程安全
* @return
*/
public static LayzSinglePattern getInstanceDoubbleLock() {
if (null == instance) {
synchronized(LayzSinglePattern.class) {
if (null == instance){
instance = new LayzSinglePattern();
}
}
}
return instance;
}
/**
* 静态内部类保证线程安全
* @return
*/
public static LayzSinglePattern getInstanceInnerClass() {
return LayzHolder.INSTANCE;
}
}
2.2 饿汉模式
/**
* 饿汉模式采用关键字final修饰,final天生是线程安全的
*/
public class HungrySinglePattern {
private static final HungrySinglePattern instance = new HungrySinglePattern();
public static HungrySinglePattern getInstance() {
return instance;
}
}
注意:JAVA反射会使单例模式失效