请选择 进入手机版 | 继续访问电脑版

热点推荐

查看: 34|回复: 0

单例模式

[复制链接]
  • TA的每日心情
    开心
    昨天 10:17
  • 签到天数: 288 天

    [LV.8]以坛为家I

    3万

    主题

    3万

    帖子

    10万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    105480
    发表于 2020-9-16 17:24:28 | 显示全部楼层 |阅读模式
    单例模式是Java中最常见的设计模式之一,单例模式常见的实现的方式有懒汉模式饿汉模式双重检测(加锁)登记模式(静态内部类)
    之前看很多文章介绍说什么什么模式安全,什么模式不安全,看了他们之间安全的差别其实就是加或者不加sychornized关键字来实现同步加锁或者不加锁。我觉得设计模式和线程安全可以暂时分开这两个概念。单例模式提供了一种获得单一对象的方式。而且只能通过这一方式获取到对象。常用于对象频繁调用而又不希望频繁创建的场景。
    饿汉模式

    public class SingletonDemo {    //线程安全的    //类初始化时,立即加载这个对象到JVM方法区    private static SingletonDemo instance = new SingletonDemo();    private SingletonDemo() {    }    //方法没有加同步块,所以它速度快    public static SingletonDemo getInstance() {        return instance;    }}懒汉模式

    public class SingletonDemo2 {    //线程不安全的    private static SingletonDemo2 instance = null;    private SingletonDemo2() {    }    //运行时加载对象 速度慢于饿汉 但是不会在一开始就占用内存    public static SingletonDemo2 getInstance() {        if (instance == null) {            instance = new SingletonDemo2();        }        return instance;    }}双重加锁模式(懒汉模式升级版)

    public class SingletonDemo3 {    private static volatile SingletonDemo3 instance = null;    private SingletonDemo3() {    }    //运行时加载对象 多线程情况下更安全    public static SingletonDemo3 getInstance() {        if (instance == null) {            synchronized(SingletonDemo3.class){                 if(instance == null){                     instance = new SingletonDemo3();                 }            }        }        return instance;    }}登记模式(静态内部类)

    public class SingletonDemo4 {      //最好的实现方式 线程安全同时懒加载      private static class SingletonHolder {         static SingletonDemo4 HOLDER = new SingletonDemo4();      }      private SingletonDemo4() {      }      public SingletonDemo4 getInstance() {           return SingletonHolder.HOLDER;      }}
    Java吧 收集整理 java论坛 www.java8.com
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表