• 测试高并发环境下五种单例模式的执行效率


    一、高并发环境下五种单例模式的调用效率测试示例

    package edu.aeon.test;
    import java.util.concurrent.CountDownLatch;
    
    import edu.aeon.model.singleton.HungrySingleton;
    import edu.aeon.model.singleton.LazySingleton;
    import edu.aeon.model.singleton.LazySingleton1;
    import edu.aeon.model.singleton.SingletonDCL;
    import edu.aeon.model.singleton.SingletonEnum;
    
    /**
     * 测试多线程环境下五种创建单例模式的调用效率
     * 
     * @author aeon
     *
     */
    public class Test {
    
        public static void main(String[] args) throws Exception {
    
            long start = System.currentTimeMillis();
            int threadNum = 100;
            final CountDownLatch countDownLatch = new CountDownLatch(threadNum);
    
            for (int i = 0; i < threadNum; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
    
                        for (int i = 0; i < 1000000; i++) {
                            /*//1.测试饿汉式
                            HungrySingleton hungrySingleton = HungrySingleton.getSinletonInstance();
                            //2.测试懒汉式
                            LazySingleton lazySingleton = LazySingleton.getLazySingletonInstance();
                            //3.测试双重检测锁
                            SingletonDCL singletonDCL = SingletonDCL.getInstance();
                            //4.测试静态内部类
                            LazySingleton1 lazySingleton1 = LazySingleton1.getLazySingletonInstance();
                            //5.测试枚举
                            SingletonEnum singletonEnum = SingletonEnum.singletonEnumInstance;*/
                        }
                        countDownLatch.countDown();
                    }
                }).start();
            }
    
            countDownLatch.await(); // main线程阻塞,直到计数器变为0,才会继续往下执行!
    
            long end = System.currentTimeMillis();
            System.out.println("总耗时:" + (end - start));
        }
    }

    二、测试结果

    单例模式 调用时间(毫秒)
    饿汉式 15
    懒汉式 897
    双重检查锁 16
    静态内部类 15
    枚举式 14

    三、高并发情况下单例模式的选用标准
      3.1如果要产生的单例对象占用资源比较少,不需要延时加载,则:枚举式好于饿汉式。
      3.2如果要产生的单例对象占用资源比较大,需要延时加载,则:静态内部类好于懒汉式。

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    win10怎么还原系统【系统天地】
    win7电脑玩游戏不能全屏怎么办【系统天地】
    win10显卡驱动报错怎么办【系统天地】
    win7防火墙在哪里设置【系统天地】
    怎么开启Win10远程桌面连接【系统天地】
    Win7系统C盘空间太小怎么扩容【系统天地】
    vscode 运行创建Vue项目指令出现“因为在此系统上禁止运行脚本“报错解决办法
    关于性能测试的基础——Jmeter
    学习笔记-202008
    EEPROM和flash的区别
  • 原文地址:https://www.cnblogs.com/aeon/p/10212206.html
Copyright © 2020-2023  润新知