zoukankan      html  css  js  c++  java
  • Java单例模式

    单例模式确保一个类只有一个实例存在。

    在计算机系统中,

    日志对象(文件只能被一个进程打开。所以使用单例模式获取日志文件的实例对象,避免了一个文件多次被打开造成的异常)

    数据库连接(节省打开或者关闭数据库连接所引起的效率损耗)

    线程池(线程池要方便对池中的线程进行控制)

    对话框、打印机、显卡的驱动程序对象常被设计成单例。

    饿汉法

    public class Singleton {  
    
        private static Singleton = new Singleton();
        private Singleton() {}
        public static getSignleton(){
            return singleton;
        }
    }
    饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。但是无法做到延迟创建对象。
     
    懒汉式
    public class Singleton {
        private static Singleton singleton = null;
        private Singleton(){}
        public static Singleton getSingleton() {
            if(singleton == null) singleton = new Singleton();
            return singleton;
        }
    }
    懒汉式单例类.在第一次调用的时候实例化自己,没有考虑线程安全问题,它是线程不安全的
    public class Singleton {   
        private Singleton(){}         
        public static Singleton getSingleton(){
            return Holder.singleton;
        }
         private static class Holder {
            private static Singleton singleton = new Singleton();
        }
    }
    通过静态内部类,延时加载,并且能保证线程安全(这样就避免了静态实例在Singleton类加载的时候就创建对象,并且由于静态内部类只会被加载一次,所以这种写法也是线程安全的:)
     
    枚举写法
    public enum EnumSingleton{
        INSTANCE;
    }
    通过EnumSingleton test=EnumSingleton.INSTANCE来访问
    使用枚举除了线程安全和防止反射强行调用构造器之外,还提供了自动序列化机制,防止反序列化的时候创建新的对象。因此,Effective Java推荐尽可能地使用枚举来实现单例。
  • 相关阅读:
    夜游遂宁滨江路
    易中天讲座十句人生感悟(发人深省,耐人寻味)
    遥望死海
    一直被忽略的成功之道:勤快并非优点,成功需要懒惰
    给别人以宽容,给自己以信心
    合理支配“财富”:经理人运用时间的12种典型模式
    三月的清晨
    学习的三重境界(想成功的人都不可错过)
    上班
    持续开发你的事业智慧:企业家保持冲锋势头的路径
  • 原文地址:https://www.cnblogs.com/corolcorona/p/6672789.html
Copyright © 2011-2022 走看看