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

php网站开发实例视频扎金花网站怎么做

php网站开发实例视频,扎金花网站怎么做,aspaccess做网站,郴州品牌网站建设推广文章目录 一、对比总览详细解释 二、代码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.ho-use.cn/article/10821604.html

相关文章:

  • 河南网站优化排名建收费网站
  • 建设移动门户网站网页小游戏玩不了怎么办
  • 做网站什么主题好哈尔滨企业建站服务商
  • 用asp做网站有哪控件网站建设 淘宝详情
  • 云落 wordpressseo对网店的作用有哪些
  • 给你一个网站seo如何做远程数据库 wordpress
  • 提交网站到百度黄石公司网站建设
  • 河南省住房和城乡建设网站建设银行移动门户网站
  • 韩国做美食的视频网站有哪些网站建设vip教程
  • 网站后台服务网络营销基本含义
  • 秦皇岛网站开发价格网站界面设计论文
  • 福建省建设厅官方网站asp.net 网站的头部和底部怎么来做 include
  • 网站开发入股合作分配比例可以直接做室内su的网站
  • 一级做a免费体验区不用下载网站做网站交易装备可以么
  • 小游戏网站怎么做网站建设陆金手指谷哥9
  • 网站模板预览齐家网和土巴兔装修哪家好
  • 个人网站建设方案书例文wordpress 提示插件安装
  • 江门手机模板建站wordpress伟静态
  • 网站开发代码无中文营销型网站的建设方案
  • 做交易网站需要办什么证微信小程序定制公司
  • 建设厅网站装修合同模板百度域名多少钱
  • 韩国免费行情网站的推荐理由videopro wordpress
  • 服务器搭建网站空间广告联盟上怎么做网站
  • 外贸网站建设哪里实惠网站首页制作浩森宇特
  • 经过开发建设 网站上线了wordpress酒店预订主题
  • 电子商务网站数据库怎么做什么网站权威评价搜索引擎优劣
  • 网站备案完成后网页设计企业网站设计的功能
  • 申请注册网站建设工程业绩查询网站
  • 搭建购物网站wordpress首页空白
  • 伯爵手表网站用front page2003做网站的导航条