• java面试题 单例设计模式


    单例设计模式   

    1. 某个类必须只有一个实例 (构造器私有化)
    2. 类必须自行创建实例(含有一个该类的静态变量存储该实例)
    3. 类自行向其他类提供这个实例  (对外提供获取该实例对象的方式)

     饿汉式  

           在类初始化的时候直接创建对象  不存在线程安全问题

              1、直接实例化饿汉式(简洁直观)

               2、静态代码块饿汉式(适合复杂实例化)

            3、枚举式(最简洁)

      1 

    1 public class Singleton1 {
    2     public final static Singleton1 singleton = new Singleton1();
    3 
    4     private Singleton1() {
    5 
    6     }
    7 }

    2

    1 public enum 枚举{
    2    // 实例变量名
    3    instance
    4 }

    3

    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; } }
     

    懒汉式:延迟创建对象

     4、线程不安全式(适用于单线程)

        5、双重校验式,线程安全(适用于多线程)

        6、静态内部类式(适用于多线程)

     


    //线程不安全
    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 }



  • 相关阅读:
    偶感
    数据库脚本开发中应注意的事项
    事务与隔离级别笔记
    Spring MVC学习笔记
    Eclipse环境配置与快捷命令
    告别2016,展望2017
    待总结项
    常见问题汇总
    我的工具箱
    精品文章收藏
  • 原文地址:https://www.cnblogs.com/weiikun/p/10986620.html
Copyright © 2020-2023  润新知