zoukankan      html  css  js  c++  java
  • 剑指Offer(书):实现单例模式

    题目:设计一个类,我们只能生成该类的一个实例。

    生成一个单例模式,有下列几种常用解法。

    1.双重检查锁。

      当运行在多线程环境中,此方法可以正常实现单例模式。

    public class Singleton1 {
        private volatile static Singleton1 instance=null;
        private Singleton1() {
        }
        public static Singleton1 getInstance() {
            if(instance==null){
                synchronized(Singleton1.class){
                    if(instance==null){
                        instance = new Singleton1();
                    }
                }
            }
            return instance;
        }
    }

    分析:

      1.将构造方法修饰为private,避免外部创建此类的实例;将instance修饰为private,避免直接引用;修饰为volatile,可以保证其可见性;

      2.getInstance方法,修饰为public static,此方法是外部唯一可以获取实例的方法。采用加锁机制保证多线程情况下的正常运行。

    2.枚举

      这种方法是书《Effective Java》中的,可以避免多线程同步问题,也能防止序列化时重新创建对象问题。

    public enum Singleton2 {
        instance;
        public void otherMethod() {
        }
    }

    3.单线程懒汉模式

      这种写法只能工作在单线程模式下。

    public class Singleton3 {
        private static Singleton3 instance;
        private Singleton3(){}
        public static Singleton3 getInstance(){
            if (instance == null) {
                instance = new Singleton3();
            }
            return instance;
        }
    }

    4.静态内部类

    public class Singleton5 {
        private static class SingletonHolder {
            private static final Singleton5 instance = new Singleton5();
        }
        private Singleton5() {
        }
        public static final Singleton5 getInsatance() {
            return SingletonHolder.instance;
        }
    }
  • 相关阅读:
    Python
    TERSUS笔记116-删除数据操作
    TERSUS笔记115-修改数据操作
    TERSUS笔记114-表格分页操作
    TERSUS笔记113-查询数据操作
    TERSUS笔记111-上传图片在列表中显示
    TERSUS笔记110-增加保存验证数据操作
    TERSUS笔记103-本地开发测试mysql数据库连接
    TERSUS笔记102-CSS样式和icon图标设置说明
    TERSUS笔记101-常用元件和操作说明
  • 原文地址:https://www.cnblogs.com/liter7/p/9416000.html
Copyright © 2011-2022 走看看