单例模式之懒汉式

Posted lzh110

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式之懒汉式相关的知识,希望对你有一定的参考价值。

单例模式之懒汉式:

class LazyMan {
    //单例模式之懒汉式,只有在需要的时候才被创建,
    //因为多个线程共享一个变量,所以会产生线程安全问题
    static private LazyMan lazyMan;
    /**
     * 因为要解决线程安全问题所以需要加上synchronized,但是这样
     * 加上后会使得程序效率很低,不仅仅是因为每次锁只允许一个线程进入,
     * 而且只有lazyMan为null的时候才会去创建,才会产生线程安全问题,
     * 不为null的时候是不会产生线程安全问题的,所以不能写成如下代码
     */
//    static synchronized LazyMan getLazyMan() {
//        if (lazyMan == null) {
//            lazyMan = new LazyMan();
//        }
//        return lazyMan;
//    }
    //这是静态方法
    static LazyMan getLazyMan() {
        //双重检验,因为如果有两条线程同时访问,假设线程A已经创建好了对象,
     //但是线程B因为也是null,如果不加第二次判断那么线程B也会创建对象。
if (lazyMan == null) { //静态代码块用共享变量的字节码文件 synchronized (LazyMan.class) { if (lazyMan == null) { lazyMan = new LazyMan(); } } } return lazyMan; } } public class Demo { public static void main(String[] args) { LazyMan lazyMan1 = LazyMan.getLazyMan(); LazyMan lazyMan2 = LazyMan.getLazyMan(); System.out.println(lazyMan1 == lazyMan2); } } 输出: true

 


以上是关于单例模式之懒汉式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式之懒汉式

单例设计模式之懒汉式(线程安全)

单例模式之懒汉式

23种设计模式之单例模式

单例模式之懒汉模式&饿汉模式

创建型模式之单例模式