单例模式

作者: erki_stwee | 来源:发表于2018-10-27 15:35 被阅读2次
     * 恶汉模式
     * 缺点:
     * getInstance()没有同步,可能会出现线程安全问题。
     */
    public class MyObject {
    
        private static MyObject sObject = new MyObject();
    
        private MyObject(){}
    
        public static MyObject getInstance(){
            return sObject;
        }
    
    }
    
     * 懒汉模式:
     * 在多线程情况下,会出现取出多个实例的情况
     */
    public class MyObject1 {
    
        private static MyObject1 sMyObject1;
        private MyObject1(){}
        //同步方法能解决创建多个实例的问题,但是效率低
        public synchronized static MyObject1 getInstance(){
            return sMyObject1 == null ? new MyObject1() : sMyObject1;
        }
    
    }
    
     * 懒汉模式:
     * 在多线程情况下,会出现取出多个实例的情况
     */
    public class MyObject2 {
    
        //使用双锁机制即保证了同步代码块的异步执行性
        //又保证了单列的效果
        private volatile static MyObject2 sMyObject1;
        private MyObject2(){}
        //同步代码块能在一定程度上提升效率,但是效率不会有显著变化
        //如果只是同步实例化代码,并不能解决多线程同步的问题
        public static MyObject2 getInstance(){
            synchronized (MyObject2.class){
                return sMyObject1 == null ? new MyObject2() : sMyObject1;
            }
        }
    
    }
    
     * 静态内置类可以达到线程安全的问题,如果遇到序列化对象时,使用默认的方式运行得到的结果还是多列的
     */
    public class MyObject3  implements Serializable{
    
        private static final long serialVersionUID = 888L;
    
        private static class MyObjectHolder{
            private static MyObject3 sMyObject3 = new MyObject3();
        }
    
        private MyObject3() {
        }
    
        public static MyObject3 getInstance(){
            return MyObjectHolder.sMyObject3;
        }
    
    }
    
     * 静态代码块中的代码在使用类的时候已经执行
     */
    public class MyObject4 {
    
        private static MyObject4 instance = null;
        private MyObject4(){}
        static{
            instance = new MyObject4();
        }
        public static MyObject4 getInstance(){
            return instance;
        }
    
    }
    

    枚举也可以实现单例,实际工作中我还能少见到有用单例模式使用枚举的。这里我就不列出来了

    相关文章

      网友评论

        本文标题:单例模式

        本文链接:https://www.haomeiwen.com/subject/ksedtqtx.html