首页 > 代码库 > 单例模式
单例模式
1.单例模式:保证整个系统中一个类只能有一个实例,而且这个实例只能是自身创建。外部不能直接创建对象(不能new)只能通过类中的固定方法获取。
2.单例模式类型:
01.懒汉式:(在调用的时候实例化)
public class DanLi { // 私有化构造,防止外部直接调用 private DanLi() { } // 创建私有化的变量 private static DanLi danLi = null; // 创建静态工厂 public static DanLi getInstance() { if (danLi == null) { danLi = new DanLi(); } return danLi; } }
线程不安全,当多个线程同时调用该方法的时候,就会创建多个实例。为了实现线程安全可以采用:
001.添加同步校验锁
public class DanLi { // 私有化构造,防止外部直接调用 private DanLi() { } // 创建私有化的变量 private static DanLi danLi = null; // 创建静态工厂 public static synchronized DanLi getInstance() { if (danLi == null) { danLi = new DanLi(); } return danLi; } }
002.双重锁
public class DanLi { //私有化构造,防止外部直接调用 private DanLi(){} //创建私有化的变量 private static DanLi danLi = null; //创建静态工厂 public static synchronized DanLi getInstance(){ if (danLi == null) { synchronized (DanLi.class) { if (danLi == null) { danLi = new DanLi(); } } } return danLi; } }
003.静态内部类
public class DanLi { // 私有化构造,防止外部直接调用 private DanLi() { } private static class LazyHolder { private static final DanLi INSTANCE = new DanLi(); } // 创建静态工厂 public static DanLi getInstance() { return LazyHolder.INSTANCE; } }
02.饿汉式:(在初始化时自动进行实例化)
在创建类的同时就已经创建好了一个静态的对象供系统使用,以后也不会再改变,故线程安全
public class DanLi { // 私有化构造,防止外部直接调用 private DanLi() { } private static final DanLi danli = new DanLi(); public static DanLi getInstance(){ return danli; } }
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。