当前位置: 首页 > news >正文

扎金花网站怎么做wordpress媒体库数据

扎金花网站怎么做,wordpress媒体库数据,大型电子商务网站建设公司,青龙建站教程文章目录 一、对比总览详细解释 二、代码1. 饿汉式2. 饱汉式3. 饱汉式-双检锁4. 静态内部类5. 枚举单例 三、性能对比 一、对比总览 以下是不同单例模式实现方式的特性对比表格。表格从线程安全性、延迟加载、实现复杂度、反序列化安全性、防反射攻击性等多个方面进行考量。 … 文章目录 一、对比总览详细解释 二、代码1. 饿汉式2. 饱汉式3. 饱汉式-双检锁4. 静态内部类5. 枚举单例 三、性能对比 一、对比总览 以下是不同单例模式实现方式的特性对比表格。表格从线程安全性、延迟加载、实现复杂度、反序列化安全性、防反射攻击性等多个方面进行考量。 特性饿汉式饱汉式饱汉式-双检锁静态内部类枚举单例推荐线程安全性√×√√√延迟加载×√√√×实现复杂度√√×√√反序列化安全性××××√防反射攻击性××××√ 详细解释 线程安全性 饿汉式类加载时即创建实例因为instance是static线程安全。饱汉式未使用同步机制线程不安全。饱汉式-双检锁使用同步块和双重检查锁线程安全。静态内部类通过类加载机制线程安全。枚举单例JVM确保线程安全。 延迟加载 饿汉式类加载时即创建实例不具备延迟加载。饱汉式实例在首次使用时创建具备延迟加载。饱汉式-双检锁实例在首次使用时创建具备延迟加载。静态内部类实例在首次使用时创建因为静态内部类只有在使用时才会加载具备延迟加载。枚举单例类加载时即创建实例不具备延迟加载。 实现复杂度 饿汉式实现简单。饱汉式实现简单。饱汉式-双检锁实现相对复杂。静态内部类实现简单。枚举单例实现简单。 反序列化安全性 饿汉式、饱汉式、饱汉式-双检锁、静态内部类需要实现 readResolve 方法以防止反序列化创建新实例。枚举单例天然防止反序列化创建新实例JVM保证。 防反射攻击性 饿汉式、饱汉式、饱汉式-双检锁、静态内部类可能通过反射创建新实例。枚举单例防止反射攻击创建新实例时抛出 IllegalArgumentException。 二、代码 1. 饿汉式 public class OrderManager1 {GetterSetterprivate MapString, TradeOrder orders new HashMap();Getterprivate static final OrderManager1 instance new OrderManager1();/*** 添加订单** param order 顺序*/public void addOrder(TradeOrder order) {orders.put(order.getId(), order);}/*** 获取订单** param orderId 订单id* return {link TradeOrder}*/public TradeOrder getOrder(String orderId) {return orders.get(orderId);} }2. 饱汉式 public class OrderManager2 {GetterSetterprivate MapString, TradeOrder orders new HashMap();private static OrderManager2 instance;public static OrderManager2 getInstance(){if (instance null){instance new OrderManager2();}return instance;}/*** 添加订单** param order 顺序*/public void addOrder(TradeOrder order) {orders.put(order.getId(), order);}/*** 获取订单** param orderId 订单id* return {link TradeOrder}*/public TradeOrder getOrder(String orderId) {return orders.get(orderId);} }3. 饱汉式-双检锁 public class OrderManager3 {GetterSetterprivate MapString, TradeOrder orders new HashMap();private static OrderManager3 instance;public static OrderManager3 getInstance(){if (instance null){synchronized (OrderManager3.class){if (instance null){instance new OrderManager3();}}instance new OrderManager3();}return instance;}/*** 添加订单** param order 顺序*/public void addOrder(TradeOrder order) {orders.put(order.getId(), order);}/*** 获取订单** param orderId 订单id* return {link TradeOrder}*/public TradeOrder getOrder(String orderId) {return orders.get(orderId);} }4. 静态内部类 public class OrderManager4 {GetterSetterprivate MapString, TradeOrder orders new HashMap();private static class SingletonHelper{private static final OrderManager4 INSTANCE new OrderManager4();}public static OrderManager4 getInstance(){return SingletonHelper.INSTANCE;}/*** 添加订单** param order 顺序*/public void addOrder(TradeOrder order) {orders.put(order.getId(), order);}/*** 获取订单** param orderId 订单id* return {link TradeOrder}*/public TradeOrder getOrder(String orderId) {return orders.get(orderId);} }5. 枚举单例 public enum OrderManager5 {INSTANCE;GetterSetterprivate MapString, TradeOrder orders new HashMap();/*** 添加订单** param order 顺序*/public void addOrder(TradeOrder order) {orders.put(order.getId(), order);}/*** 获取订单** param orderId 订单id* return {link TradeOrder}*/public TradeOrder getOrder(String orderId) {return orders.get(orderId);} }三、性能对比 package org.dragon.singleton;import lombok.extern.slf4j.Slf4j;import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.function.Supplier;Slf4j public class SingletonPerformanceTest {static long timeout 20; // 超时时间单位为秒static int testIterations 10_000_000; // 测试次数static int threadCount 1000; // 并发线程数static MapString, HashMapString, Long result new HashMap();public static void main(String[] args) {/** 多次调用结果是最后一次调用存入。为什么多次调用因为单次test不准确总是靠前的OrderManager跑的快可能是因为Java某些机制导致的* 所以多次调用逐渐平稳。* */firstCreationTest();mulAccessTest();mulAccessTest();mulAccessTest();ConcurrentAccessTest();ConcurrentAccessTest();printRes();ConcurrentAccessTest();printRes();ConcurrentAccessTest();printRes();}/*** 打印结果*/private static void printRes(){ArrayListString names new ArrayList();names.add(OrderManager1.class.getSimpleName());names.add(OrderManager2.class.getSimpleName());names.add(OrderManager3.class.getSimpleName());names.add(OrderManager4.class.getSimpleName());names.add(OrderManager5.class.getSimpleName());// 表头System.out.printf(%-20s%-20s%-25s%-25s%-20s%n, Singleton Type, First Creation (ms), Multiple Access (ms), Concurrent Access (ms), Memory Used (MB));System.out.println(---------------------------------------------------------------------------------------------------------------);for (String name : names) {// 打印结果转换时间为毫秒System.out.printf(%-20s%-20.3f%-25.3f%-25.3f%-20.3f%n, name, result.get(name).get(firstCreation) / 1_000_000.0, result.get(name).get(mulAccess) / 1_000_000.0, result.get(name).get(ConcurrentAccess) / 1_000_000.0, 0 / (1024.0 * 1024.0));}}/*** 首次创建测试*/private static void firstCreationTest(){ListRunnable tests new ArrayList();tests.add(()-firstCreation(OrderManager1::getInstance));tests.add(()-firstCreation(OrderManager2::getInstance));tests.add(()-firstCreation(OrderManager3::getInstance));tests.add(()-firstCreation(OrderManager4::getInstance));tests.add(()-firstCreation(() - OrderManager5.INSTANCE));// 随机化测试顺序Collections.shuffle(tests);//runfor (Runnable test : tests) {test.run();log.info(Complete one test);try {Thread.sleep(200);} catch (InterruptedException e) {throw new RuntimeException(e);}}}/*** 多次访问测试*/private static void mulAccessTest(){ListRunnable tests new ArrayList();tests.add(()-mulAccess(OrderManager1::getInstance, testIterations));tests.add(()-mulAccess(OrderManager2::getInstance, testIterations));tests.add(()-mulAccess(OrderManager3::getInstance, testIterations));tests.add(()-mulAccess(OrderManager4::getInstance, testIterations));tests.add(()-mulAccess(() - OrderManager5.INSTANCE, testIterations));// 随机化测试顺序Collections.shuffle(tests);//runfor (Runnable test : tests) {test.run();log.info(Complete one test);try {Thread.sleep(200);} catch (InterruptedException e) {throw new RuntimeException(e);}}}/*** 多线程访问测试*/private static void ConcurrentAccessTest(){ListRunnable tests new ArrayList();tests.add(()-ConcurrentAccess(OrderManager1::getInstance, testIterations, threadCount));tests.add(()-ConcurrentAccess(OrderManager2::getInstance, testIterations, threadCount));tests.add(()-ConcurrentAccess(OrderManager3::getInstance, testIterations, threadCount));tests.add(()-ConcurrentAccess(OrderManager4::getInstance, testIterations, threadCount));tests.add(()-ConcurrentAccess(() - OrderManager5.INSTANCE, testIterations, threadCount));// 随机化测试顺序Collections.shuffle(tests);//runfor (Runnable test : tests) {test.run();log.info(Complete one test);try {Thread.sleep(200);} catch (InterruptedException e) {throw new RuntimeException(e);}}}/*** 首次创建** param singletonSupplier 单一供应商* return long ns*/private static T long firstCreation(SupplierT singletonSupplier){// 测试首次创建时间long startTime System.nanoTime();T instance singletonSupplier.get();long endTime System.nanoTime();long resTime endTime - startTime;//save resString simpleName instance.getClass().getSimpleName();HashMapString, Long resMap result.computeIfAbsent(simpleName, k-new HashMap());resMap.put(firstCreation, resTime);return resTime;}/*** 多次访问** param singletonSupplier 单一供应商* param iterations 迭代* return long ns*/private static T long mulAccess(SupplierT singletonSupplier, int iterations){//预热for (int i 0; i 100_000; i) {T instance singletonSupplier.get();}//计算long startTime System.nanoTime();for (int i 0; i iterations; i) {T instance singletonSupplier.get();}long endTime System.nanoTime();long resTime endTime - startTime;//save resString simpleName singletonSupplier.get().getClass().getSimpleName();HashMapString, Long resMap result.computeIfAbsent(simpleName, k-new HashMap());resMap.put(mulAccess, resTime);return resTime;}/*** 并发访问** param singletonSupplier 单一供应商* param iterations 迭代* param threadCount 线程数* return long ns*/private static T long ConcurrentAccess(SupplierT singletonSupplier, int iterations, int threadCount){ExecutorService executorService Executors.newFixedThreadPool(100);//预热CountDownLatch latch1 new CountDownLatch(100);for (int i 0; i threadCount; i) {executorService.submit(() - {for (int j 0; j 100_000; j) {T instance singletonSupplier.get();}latch1.countDown();});}try {boolean completed latch1.await(timeout, TimeUnit.SECONDS);if (!completed) {System.out.println(Concurrent access test for 预热 singletonSupplier.get().getClass().getSimpleName() timed out!);}} catch (InterruptedException e) {e.printStackTrace();}//计算CountDownLatch latch2 new CountDownLatch(threadCount);long startTime System.nanoTime();for (int i 0; i threadCount; i) {executorService.submit(() - {for (int j 0; j iterations; j) {T instance singletonSupplier.get();}latch2.countDown();});}try {boolean completed latch2.await(timeout, TimeUnit.SECONDS);if (!completed) {System.out.println(Concurrent access test for singletonSupplier.getClass().getSimpleName() timed out!);}} catch (InterruptedException e) {e.printStackTrace();}long endTime System.nanoTime();long concurrentAccessTime endTime - startTime;executorService.shutdown();//save resString simpleName singletonSupplier.get().getClass().getSimpleName();HashMapString, Long resMap result.computeIfAbsent(simpleName, k-new HashMap());resMap.put(ConcurrentAccess, concurrentAccessTime);return concurrentAccessTime;} }结果输出如下 [17:15:54.519] [INFO ] org.dragon.singleton.SingletonPerformanceTest 73 firstCreationTest - Complete one test [17:15:54.730] [INFO ] org.dragon.singleton.SingletonPerformanceTest 73 firstCreationTest - Complete one test [17:15:54.936] [INFO ] org.dragon.singleton.SingletonPerformanceTest 73 firstCreationTest - Complete one test [17:15:55.141] [INFO ] org.dragon.singleton.SingletonPerformanceTest 73 firstCreationTest - Complete one test [17:15:55.347] [INFO ] org.dragon.singleton.SingletonPerformanceTest 73 firstCreationTest - Complete one test [17:15:55.554] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:55.782] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:56.007] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:56.227] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:56.445] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:56.669] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:56.906] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:57.146] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:57.376] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:57.598] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:57.818] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:58.054] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:58.276] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:58.495] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:58.716] [INFO ] org.dragon.singleton.SingletonPerformanceTest 97 mulAccessTest - Complete one test [17:15:59.430] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:15:59.658] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:02.737] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:08.533] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:13.700] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:19.432] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:24.632] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:30.366] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:35.516] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:40.431] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test Singleton Type First Creation (ms) Multiple Access (ms) Concurrent Access (ms) Memory Used (MB) --------------------------------------------------------------------------------------------------------------- OrderManager1 0.010 16.848 4928.236 0.000 OrderManager2 0.010 18.592 5504.781 0.000 OrderManager3 0.009 19.127 5513.309 0.000 OrderManager4 0.241 18.772 4920.940 0.000 OrderManager5 0.117 16.637 4704.835 0.000 [17:16:45.002] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:48.982] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:52.778] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:16:57.834] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:17:02.298] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test Singleton Type First Creation (ms) Multiple Access (ms) Concurrent Access (ms) Memory Used (MB) --------------------------------------------------------------------------------------------------------------- OrderManager1 0.010 16.848 4217.333 0.000 OrderManager2 0.010 18.592 4340.869 0.000 OrderManager3 0.009 19.127 4824.581 0.000 OrderManager4 0.241 18.772 3743.032 0.000 OrderManager5 0.117 16.637 3558.995 0.000 [17:17:06.778] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:17:11.231] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:17:15.733] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:17:20.812] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test [17:17:25.837] [INFO ] org.dragon.singleton.SingletonPerformanceTest 121 ConcurrentAccessTest - Complete one test Singleton Type First Creation (ms) Multiple Access (ms) Concurrent Access (ms) Memory Used (MB) --------------------------------------------------------------------------------------------------------------- OrderManager1 0.010 16.848 4281.649 0.000 OrderManager2 0.010 18.592 4849.279 0.000 OrderManager3 0.009 19.127 4782.224 0.000 OrderManager4 0.241 18.772 4267.228 0.000 OrderManager5 0.117 16.637 4233.907 0.000 进程已结束退出代码为 0可以去多跑几次基本上最后一种枚举单例性能属于最好的一批。并且也最安全。
http://www.tj-hxxt.cn/news/225761.html

相关文章:

  • 顺德网站制作案例市场热门的网页设计工具有哪些
  • 南通网站制作域名如何指向网站
  • dede 中英文网站 怎么做创建网站购买域名要注意什么
  • 域名可以绑定网站吗广州地铁18号线最新线路图
  • 环境网站模板济宁网站建设流程
  • 移动版网站开发黄页网站怎么查
  • 做网站外包好做吗广告公司取什么名字好
  • 高大上的企业网站欣赏南宁百度seo价格
  • 基础网站建设素材张雪峰不建议报的计算机
  • 水务 网站建设拍摄宣传片的流程简要
  • 企业网站后台管理模板展厅设计公司首选
  • 做ppt好的模板下载网站北京工程设计公司排名
  • 企业网站制作步骤燕窝网站怎么做的
  • 阿里巴巴国际站买家版appseo会被取代吗
  • 徐州cms模板建站搜索关键词站长工具
  • 门户网站建设专业御花园网站建设公司
  • 桥西区建设局网站wordpress点击下载
  • 牡丹江网站建设东莞网站建设(信科网络)
  • 做服装有哪些好的网站鞍山ui界面
  • 商城网站程序wordpress中英文网站
  • 公司直招的招聘网站互联网技术怎么学
  • 营销型平台网站制作公司网页思路怎么写
  • 学校网站开发的背景妙影免费模板下载
  • 江苏网站开发建设电话呼市网页设计培训
  • 网站每年要交钱吗正规中国建筑装饰产业网官网
  • 有网站前端如何做后台seo分析及优化建议
  • 昆山建设工程信息网站商城网站 没有什么文章 怎样优化
  • 双语网站用什么程序做域名注册查询批量
  • 做网站搜索排名access数据库做网站
  • 电子商务目前就业形势邢台网站优化服务平台