java面试题 单例设计模式
2020-12-02 02:31
标签:单例 饿汉式 private 适合 rev 模式 nsa 必须 tin 单例设计模式 饿汉式 在类初始化的时候直接创建对象 不存在线程安全问题 1、直接实例化饿汉式(简洁直观) 2、静态代码块饿汉式(适合复杂实例化) 3、枚举式(最简洁) 1 2 3 懒汉式:延迟创建对象 4、线程不安全式(适用于单线程) 5、双重校验式,线程安全(适用于多线程) 6、静态内部类式(适用于多线程) java面试题 单例设计模式 标签:单例 饿汉式 private 适合 rev 模式 nsa 必须 tin 原文地址:https://www.cnblogs.com/weiikun/p/10986620.html
1 public class Singleton1 {
2 public final static Singleton1 singleton = new Singleton1();
3
4 private Singleton1() {
5
6 }
7 }
1 public enum 枚举{
2 // 实例变量名
3 instance
4 }
public class Singleton2 {
public final static Singleton2 INSTANCE;
static {
INSTANCE = new Singleton2();
}
private Singleton2() {
}
}
public class Singleton2 {
public final static Singleton2 INSTANCE;
private String ss
static {
info =从文件中获得数据
INSTANCE = new Singleton2("info");
}
private Singleton2(String s) {
this.ss=s;
}
}
//线程不安全
public class s {
2
3 private static s instance;
4 private s(){}
5
6 public static s getInstance(){
7 if (instance==null){
8 instance=new s();
9 }
10 return instance;
11 }
12 }//线程安全版
public class s2{
private s2(){}
private static s2 instance;
public static s2 getInsatnce(){
if(!instance==null){
synchronized(s2.class){
if(instance==null){
instance=new s2();
}
}
}
return instance;
}
}
1 //在内部类被加载和初始化的时候 才创建instance实例对象
2 //静态内部类不会随着外部类的加载和初始化而初始化 它需要单独去加载和初始化
3 //因为是在内部类加载和初始化的时候才加载和创建的 因此是线程安全的
4 public class s3{
5
6 private s3(){}
7
8 private static class Inner{
9 private static final s3 instance =new s3();
10 }
11
12 public static s3 getInstance(){
13
14 return Inner.instance;
15 }
16 }