zoukankan      html  css  js  c++  java
  • 单例模式之懒汉模式,懒汉模式之高效模式,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();
        }
    }
    

      两个判断的位置

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

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

    输出结果:

  • 相关阅读:
    牛客 小a与星际探索 bfs
    gear gym 思维题
    dp Surf
    P1280 尼克的任务
    Codeforces Round #539 (Div. 2) C. Sasha and a Bit of Relax
    Codeforces Round #542 C. Connect 搜索
    Layui 文件上传 附带data数据
    Layui 隐藏左侧菜单
    Layui 关闭当前标签页
    Layui Iframe页面间 方法的相互调用
  • 原文地址:https://www.cnblogs.com/qfxydtk/p/8728937.html
Copyright © 2011-2022 走看看