黑马程序员技术交流社区
标题:
java基础---7种方式实现单例模式
[打印本页]
作者:
wangbo7853
时间:
2018-4-16 17:32
标题:
java基础---7种方式实现单例模式
之前也有同学提到过单例模式,常用的有饿汉和懒汉模式这两种,于是就去找了相关的资料,发现有7种方法可以实现单例模式。话不多少,进入正题
第一种,线程不安全(懒汉模式)
public class Singleton1 {
private static Singleton1 instance;
private Singleton1(){}
public static Singleton1 getInstance(){
if(instance == null){
instance = new Singleton1();
}
return instance;
}
}
第二种,线程安全(懒汉模式)
public class Singleton2 {
private static Singleton2 instance;
private Singleton2(){}
public static synchronized Singleton2 getInstance(){
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}
第三种,线程安全(饿汉模式)
public class Singleton3 {
private static Singleton3 instance = new Singleton3();
private Singleton3(){}
public static synchronized Singleton3 getInstance(){
return instance;
}
}
第四种,线程安全(饿汉模式)
public class Singleton4 {
private static Singleton4 instance ;
static {
instance = new Singleton4();
}
private Singleton4(){}
public static synchronized Singleton4 getInstance(){
return instance;
}
}
第五种,线程安全(静态内部类)
public class Singleton5 {
private Singleton5(){}
public static synchronized Singleton5 getInstance(){
return SingletonHolder.instance;
}
private static class SingletonHolder{
private static Singleton5 instance = new Singleton5();
}
}
第六种,线程安全(枚举类)
public enum Singleton6 { INSTANCE; public void whateverMethod(){} }
第七种,线程安全(双重校验模式)
public class Singleton7 {
private static Singleton7 instance;
private Singleton7(){}
public static synchronized Singleton7 getInstance(){
if(instance == null){
synchronized (Singleton7.class){
if(instance ==null){
instance = new Singleton7();
}
}
}
return instance;
}
}
作者:
HHSUVV
时间:
2018-4-16 17:49
本帖最后由 HHSUVV 于 2018-4-16 17:50 编辑
老哥 完全没看懂 明天 教教我啊
作者:
cj1234
时间:
2018-4-18 15:30
厉害厉害
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2