Singleton - 单例模式
2018-07-13 本文已影响30人
GeekAmI
1. show you the code:
public class Singleton01 {
private static Singleton01 instance;
private Singleton01() {
}
// 线程不安全的单例实现
public static Singleton01 getInstance(){
if(instance == null)
instance = new Singleton01();
return instance;
}
}
public class Singleton02 {
private static Singleton02 instance;
private Singleton02() {
}
//线程安全,但效率低
public static synchronized Singleton02 getInstance(){
if(instance == null)
instance = new Singleton02();
return instance;
}
}
public class Singleton03 {
private static Singleton03 instance = new Singleton03();
private Singleton03() {
}
//线程安全,饿汉模式
public static Singleton03 getInstance(){
return instance;
}
}
public class Singleton04 {
private volatile static Singleton04 instance;//volatile 防止指令重排
private Singleton04() {
}
//线程安全,双重检索模式
public static Singleton04 getInstance() {
if (instance == null) {
synchronized (Singleton04.class) {
if (instance == null) {
instance = new Singleton04();
}
}
}
return instance;
}
}
// 内部静态类方式,线程安全
public class Singleton05 {
private Singleton05() {
}
private static class SingletonHolder{
private static final Singleton05 INSTANCE = new Singleton05();
}
public static Singleton05 getInstance(){
return SingletonHolder.INSTANCE;
}
}
//枚举模式
public enum SingletonEnum {
INSTANCE;
}
- 举例子
![](https://img.haomeiwen.com/i2132763/bee8a501efa3dfb2.png)
![](https://img.haomeiwen.com/i2132763/aeb22218375d90b5.png)