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

上海市建设工程信息报送网站注册做网站的营业执照

上海市建设工程信息报送网站,注册做网站的营业执照,滑县做网站公司,源码屋官网目录 一、设计模式1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式 1.2 线程安全问题1.3 懒汉模式线程安全问题的解决方法1.3.1 原子性问题解决1.3.2 解决效率问题1.3.3 解决内存可见性问题和指令重排序问题 一、设计模式 在讲解案例前#xff0c;先介绍一个概念设计模式#xff… 目录 一、设计模式1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式 1.2 线程安全问题1.3 懒汉模式线程安全问题的解决方法1.3.1 原子性问题解决1.3.2 解决效率问题1.3.3 解决内存可见性问题和指令重排序问题 一、设计模式 在讲解案例前先介绍一个概念设计模式就是大佬们把一些经典问题整理出来针对这些场景大佬们总结出固定的套路来解决这些问题。就类似棋谱一样的概念。 1.1 单例模式 单例模式就是强制要求某个类在某个程序中只能有一个实例只能new一个对象。比如在开发中一个类存有很大的数据量new两三次就把空间占满了这时就可以使用单例模式了。 1.1.1 饿汉模式 饿指尽早创建对象。 饿汉模式类对象在类中使用static修饰为静态成员并将构造方法使用private修饰私有化。 下面写一个简单饿汉模式代码 class SingletonHunger {private static SingletonHunger instance new SingletonHunger();public static SingletonHunger getInstance() {return instance;}private SingletonHunger() {} }1.1.2 懒汉模式 懒指尽量晚创建对象甚至不创建。 懒汉模式类对象在类中使用static修饰为静态成员并赋值为null并将构造方法使用private修饰私有化只不过是在get方法中去实例化。 下面写一个简单懒汉模式代码 class SingletonLazy {private static SingletonLazy instance null;public static SingletonLazy getInstance() {if(instance null) {instance new SingletonLazy();}return instance;}private SingletonLazy() {} }1.2 线程安全问题 在多线程代码中我们要考虑上诉两中模式是否存在线程安全问题。 我们看饿汉模式中在类创建的同时直接就将对象实例化好了后续就一个return操作相当于只是读取操作而读取操作是不涉及线程安全问题的所以饿汉模式不存在线程安全问题。我们看懒汉模式中是先进行一次判断操作在进行实例化那这样就涉及到不是原子性的了所以懒汉模式存在线程安全问题。 1.3 懒汉模式线程安全问题的解决方法 1.3.1 原子性问题解决 这样的问题我们使用synchronized加锁操作就行。 可以加在get方法上以当前类对象作为锁对象也可以将if包含起来。 class SingletonLazy {private static SingletonLazy instance null;private static Object block new Object();public static SingletonLazy getInstance() {synchronized(block){if(instance null) {instance new SingletonLazy();}return instance;}}private SingletonLazy() {} }1.3.2 解决效率问题 在我们上面加了锁之后创建完对象之后每次在调用get方法的时候还是会加锁这就会导致产生锁竞争线程阻塞问题影响效率。 这种解决方式就是在这之前在判断一次对象是否为空就行了。 class SingletonLazy {private static SingletonLazy instance null;private static Object block new Object();public static SingletonLazy getInstance() {if(instance null) {synchronized (block) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy() {} }这可能两个相同的判空语句放在一起感觉会有点别扭但是其实两者的作用是天差地别的 第一个语句是防止加了锁之后在竞争锁导致效率低第二个语句是为了保证判断和实例是原子的。 1.3.3 解决内存可见性问题和指令重排序问题 编译器是否会进行优化导致内存可见性问题的出现是不一定的人为也不好预测。所以在对象前面加上volatile修饰就好。 指令重排序是编译器对代码执行的指令的顺序进行调整以达到优化的目的。 就像去买东西一样先买什么后买什么的顺序也会影响买东西花费的时间。 而在上诉代码中instance new SingletonLazy();这个语句就有可能触发指令重排序问题。 这条语句主要执行三条主要指令; 申请内存空间在空间上构造对象也就是实例化对象将内存空间的首地址赋值给引用变量。 正常的执行顺序是1-2-3但是由于指令重排序会出现1-3-2的情况 这样先执行了3操作该对象就不为null了其它线程就可以对这个还没有实例化的对象进行操作了。这也引发了线程不安全问题。 这个问题的解决方法也是在对象前面加上volatile修饰就好。 volatile主要作用是 确保从内存中读取数据避免内存可见性问题确保读取和修改操作不会触发指令重排序问题。 代码 class SingletonLazy {private volatile static SingletonLazy instance null;private static Object block new Object();public static SingletonLazy getInstance() {if (instance null) {synchronized (block) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy() {} }
http://www.zqtcl.cn/news/531098/

相关文章:

  • 阿里巴巴的网站建设与维护北京发布会直播回放
  • 深圳技术支持 骏域网站建设微信官方公众号
  • dns解析失败登录不了网站推广网站平台有哪些
  • 网站建设许可证网页设计找工作
  • 想通过网站卖自己做的东西网络公司如何建网站
  • 商务网站开发实训任务书网站建设验收合格确认书
  • 手机网站百度关键词排名查询wordpress 敏感词
  • 网站分页导航常州网约车哪个平台最好
  • 上海 网站开发设计方案参考网站
  • 网站一键备案外呼电销系统
  • 淘宝客购物网站源码网站项目开发的一般流程
  • 如何更改公司网站内容网站开发需要哪些文档
  • 洛阳建设工程网站宁波led网站建设
  • 五莲网站建设报价wordpress dux 5.3
  • 怎样做当地网站推广做电商要关注哪些网站
  • 安徽鸿顺鑫城建设集团网站设计外贸英文网站
  • 浦口区教育局网站集约化建设南京淄博网站建设方案
  • 学校网站建设的风险分析wordpress侧边栏显示单个分类列表
  • php网站安装图解帮别人建设网站多少利润
  • vs做的网站如何二手优品哪个网站做
  • 建设银行内部网站6建筑学院官网
  • 大学生做微商网站金华seo扣费
  • 以前老网站邯郸推广网络宣传哪家好
  • 网站建设技术网站建设奉节网站建设公司
  • 动漫视频网站模板动漫制作专业什么电脑最适合
  • 合网站建设注册一个500万的公司需要多少钱
  • 《网站推广策划》wordpress 写博客
  • 网站开发工程师面试问哪些问题免费下载软件商店安装
  • 建网站公司要钱吗公司制作网站跟企业文化的关系
  • 网站改版对用户的影响网站评论怎么做的