首页 > 其他 > 详细

单例模式

时间:2018-08-14 14:01:29      阅读:260      评论:0      收藏:0      [点我收藏+]

概念:

单例模式(Singleton),也叫单子模式,是一种常用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候,整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,显然,这种方式简化了在复杂环境下的配置管理。

实现方式:

1.是在调用方法的时候进行实例化的工作,这种方式俗称懒汉模式;

2.是在类的加载的时候就创建一个实例,这种方式俗称饿汉模式;

实现单例模式:

1、懒汉式,线程不安全:

public class Boss {
    private Boss() {
    }
    private static Boss boss = null;
    public static Boss getBoss(){
        if(boss == null) {
            boss = new Boss();
        }
        return boss;
    }
}

 

public static void main(String[] args) {
        ExecutorService pool = Executors.newCachedThreadPool();
        for (int i = 0; i < 20; i++) {
            pool.execute(new Thread(){
                @Override
                public void run() {
                    Boss boss = Boss.getBoss();
                    System.out.println(boss);
                }
            });
        }
    }

运行结果:

技术分享图片

描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。
这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。

2、懒汉式,线程安全

public class Boss {
    private Boss() {
    }
    private static Boss boss = null;
    public static synchronized Boss getBoss(){
        if(boss == null) {
            boss = new Boss();
        }
        return boss;
    }
}

运行结果:

技术分享图片

 

描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。

3、双重校验锁

public class Boss {
    private Boss() {
    }
    private static Boss boss = null;
    public static synchronized Boss getBoss(){
        if(boss == null) {
            synchronized (Boss.class){
                if(boss == null) {
                    boss = new Boss();
                }
            }
        }
        return boss;
    }
}

运行结果:

技术分享图片

描述:这种方式采用双锁机制,安全且在多线程情况下能保持高性能。

优点:安全且保持高效性。

4、静态内部类

 

单例模式

原文:https://www.cnblogs.com/Qi1007/p/9473635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!