单例模式之懒汉模式,懒汉模式之高效模式,DLC双判断模式

Posted qfxydtk

tags:

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

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 单例模式之懒汉模式
 * 懒汉模式之高效模式
 * DLC双判断模式
 */
public class SingleClassLazySync {
    private static SingleClassLazySync singleClassLazySync;

    private SingleClassLazySync() {
    }

    public static SingleClassLazySync getInstance() {
        if (singleClassLazySync == null) {
            synchronized (SingleClassLazySync.class) {
                if (singleClassLazySync == null) {
                    System.out.println("i m in new instance!");
                    singleClassLazySync = new SingleClassLazySync();
                }
            }
        }
        return singleClassLazySync;
    }

    static class A implements Runnable {

        @Override
        public void run() {
            System.out.println(SingleClassLazySync.getInstance().hashCode());
        }
    }

    public static void main(String[] args) {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 5, 0l, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
        boolean flag = true;
        for (int i = 0; i < 5; i++)
            executor.execute(new A());
        executor.shutdown();
    }
}

  两个判断的位置

第一个为了日后获取实例的线程准备

第二个为了刚刚获得锁的线程准备,如果没有这个,将会有同步问题。

输出结果:技术分享图片

 

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

设计模式之单例模式(懒汉, 饿汉)

单例模式之懒汉式

单例模式之懒汉式

单例模式之 懒汉模式普通版

单例模式之懒汉的并发问题

多线程单例模式之延迟加载(懒汉模式)