1.饿汉
/**
* 饿汉
* 简单常用的单例模式
* 优点:线程安全,容易编写
* 缺点:随着类的加载就会初始化这个单例。
* @author WangJunren
* @since 2021/2/22 07:56
*/
public class Single_001 {
private static final Single_001 single_001 = new Single_001();
private Single_001(){}
public Single_001 getInstance(){
return single_001;
}
}
2.饿汉2
/**
* 跟001 一个意思
* @author WangJunren
* @since 2021/2/22 08:02
*/
public class Single_002 {
private final static Single_002 single_002;
static{
single_002 = new Single_002();
}
private Single_002(){}
public Single_002 getInstance(){
return single_002;
}
}
3.懒汉
/**
* 懒汉
* 很明显的线程不安全的问题
* @author WangJunren
* @since 2021/2/22 08:04
*/
public class Single_003 {
private static Single_003 single_003;
private Single_003(){}
public Single_003 getInstance(){
if (single_003 == null) {
single_003 = new Single_003();
}
return single_003;
}
}
4.双重检查
/**
* 双重检查
* @author WangJunren
* @since 2021/2/22 08:07
*/
public class Single_004 {
private static Single_004 single_004;
private Single_004(){}
public Single_004 getInstance(){
if (single_004 == null) {
synchronized (this){
if (single_004 == null) {
single_004 = new Single_004();
}
}
}
return single_004;
}
}
5.内部类方式
/**
* 内部类方式
*
* @author WangJunren
* @since 2021/2/22 09:09
*/
public class Single_005 {
private Single_005(){}
public Single_005 getInstance(){
return Single_005Handle.single_005;
}
private static class Single_005Handle{
private static final Single_005 single_005 = new Single_005();
private Single_005Handle(){}
}
}
6.枚举方式
/**
* 枚举方式的单例
*
* @author WangJunren
* @since 2021/2/22 09:16
*/
public enum Single_006 {
INSTANCE;
}