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

提升自己网站/网络营销心得体会1000字

提升自己网站,网络营销心得体会1000字,证明做二维码打款网站链接,网站怎样制作 优帮云本文主要分析单例模式常见的几种实现方式 一. 类图 单例模式使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 二. 实现方式 2.1 饿汉式 饿…

本文主要分析单例模式常见的几种实现方式

一. 类图


单例模式使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。

私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。

二. 实现方式


2.1 饿汉式

饿汉式在类加载的时候就进行实例化,这样做的好处是线程安全;但缺点也是有的,首先在加载的时候就进行实例化,万一这个类占用的资源很大,就会非常浪费资源,毕竟它不一定在什么时候被使用,但内存是一开始就被占用了。


public class HungryManSingleton {private static HungryManSingleton hungryManSingleton = new HungryManSingleton();private HungryManSingleton() { }public static HungryManSingleton getInstance() {return hungryManSingleton;}} 复制代码

在main方法中验证饿汉式实现的单例模式


HungryManSingleton instance1 = HungryManSingleton.getInstance();HungryManSingleton instance2 = HungryManSingleton.getInstance();System.out.println("从饿汉单例获取的两个实例比较:" + instance1.equals(instance2));复制代码

输出:

使用反射破坏饿汉式单例模式:


//使用反射获取构造方法,再将构造方法的私有性破坏,然后用这个构造方法创建一个实例Class<HungryManSingleton> singletonClass = HungryManSingleton.class;Constructor<HungryManSingleton> declaredConstructor = singletonClass.getDeclaredConstructor();declaredConstructor.setAccessible(true);HungryManSingleton instance1 = HungryManSingleton.getInstance();HungryManSingleton instance2 = declaredConstructor.newInstance();System.out.println("与反射获取的实例比较:" + instance2.equals(instance1));复制代码

输出:

可以看到,他们并不是同一个对象,这意味着饿汉式单例模式被破坏了

事实上,使用反射后,无论是饿汉式、懒汉式、升级的双重校验锁机制、静态内部类机制,都是不安全的

2.2 懒汉式

在懒汉式的实现中,默认不会进行实例化,什么时候用到了,什么时候 New,从而节约资源


public class LazySingleton {private static LazySingleton lazySingleton;private LazySingleton() {System.out.println(Thread.currentThread().getName());}public static LazySingleton getInstance() {if (lazySingleton == null) lazySingleton = new LazySingleton();return lazySingleton;}}复制代码

但是这个实现在多线程的环境下是不安全的,试想以下,当 lazySingleton 为空时,试想一下,当lazySingleton 为空时,有多个线程同时通过了if (lazySingleton == null) 的判断,这样就会导致new 被执行了多次,使用代码复现一下:


public static void main(String[] args) {for (int i = 0; i < 10; i++) {new Thread(() -> LazySingleton.getInstance()).start();}}复制代码

控制台输出:

可以看到,实例化代码被执行了三次,为了解决线程安全的问题有两个方法:

  1. getInstance() 方法的层级上加关键字 synchronized

  2. 引入双重检测锁

3.3 双重校验锁

为了解决懒汉式线程不安全的问题,可以引入双重校验锁的机制,双重检验锁也是一种延迟加载,并且较好的解决了在确保线程安全的时候效率低下的问题

以下是代码实现:


public class DCLSingleton {private volatile static DCLSingleton dclSingleton;private DCLSingleton() { }public static DCLSingleton getInstance() {if (dclSingleton == null) {synchronized (DCLSingleton.class) {if (dclSingleton == null) dclSingleton = new DCLSingleton();}
http://www.lbrq.cn/news/1468261.html

相关文章:

  • 和县网站开发/百度seo排名优化如何
  • 广东华迪工程建设监理公司网站/竞价推广工具
  • xuzhou公司网站制作/域名排名查询
  • 湘潭找工作网站/竞价广告
  • 淘宝做海淘产品 网站折扣变化快/上海百度搜索排名优化
  • 手机网站制作费用多少/seo排名优化点击软件有哪些
  • 做电影网站要怎么拿到版权/人民日报新闻
  • 乌鲁木齐百度seo/seo快速优化软件
  • 花瓣网是仿国外那个网站做的/宁德市
  • 晋城手机网站建设/站长工具ip查询
  • 做实验用哪些国外网站/外贸推广方式
  • 网站建设主流技术/玄幻小说排行榜百度风云榜
  • 网站建设和维护怎么学/我赢网seo优化网站
  • 今日兰州疫情最新消息/谷歌seo博客
  • 男人和女人做性网站/爱站网seo工具
  • dede网站迁移步骤/平台推广员是做什么的
  • 武汉网站建设优化/网站推广方案有哪些
  • 企业3合1网站建设/网站推广seo方法
  • 怎么做网站把图片发到网上/网站建设服务公司
  • 深圳做网站价格/网站你应该明白我的意思吗
  • 做网站策划案/百度快速排名优化技术
  • 阿里云备案网站建设方案书案例/营销型公司网站建设
  • 北京网站设计公司新鸿儒/近期国内外重大新闻10条
  • 国内net开发的网站建设/网络营销的产品策略
  • 织梦可以做大型网站吗/百度seo优化是什么
  • 企业网查询四六级/深圳seo优化电话
  • 开源房产网站源码/设计公司网站设计
  • 运营网站团队建设/app营销十大成功案例
  • 企业网站建设注意/营销策略ppt
  • 梅林网站建设/保定网站seo
  • 入门MicroPython+ESP32:安装逗脑IDE及驱动
  • TypeScript03-web项目知识
  • Autosar Nm-网管报文PNC停发后无法休眠问题排查
  • 开源医院信息管理系统:基于若依框架的智慧医疗解决方案
  • 对于前端闭包的详细理解
  • Canny边缘检测算法-个人记录