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

做电影网站需要哪些证上海网站营销seo方案

做电影网站需要哪些证,上海网站营销seo方案,学校网站建设必要性,记事本做网站怎么调整图片间距多线程进阶(一) 文章目录 多线程进阶(一)单例模式饿汉模式懒汉模式 本篇主要引入多线程进阶的单例模式,为后面的大冰山做铺垫 代码案例介绍 单例模式 非常经典的设计模式 啥是设计模式 设计模式好比象棋中的 “棋谱”…

多线程进阶(一)

文章目录

  • 多线程进阶(一)
    • 单例模式
      • 饿汉模式
      • 懒汉模式

本篇主要引入多线程进阶的单例模式,为后面的大冰山做铺垫

代码案例介绍

单例模式

非常经典的设计模式

啥是设计模式

设计模式好比象棋中的 “棋谱”. 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路来走局势就不会吃亏.

软件开发中也有很多常见的 “问题场景”. 针对这些问题场景, 大佬们总结出了一些固定的套路. 按照这个套路来实现代码, 也不会吃亏.

单例 -> 单个实例(对象)

在有些场景下,希望有的类,只能有一个对象,不能有多个!在这样的场景下就可以使用单例模式了。

举个有意思的例子就是,你只能娶一个老婆,不过你可以生很多娃🥵🥵🥵,娃就不一定是单例的


在代码中,有很多用于管理数据的对象,就应该是”单例“的,例如mysql JDBC DataSource(描述mysql服务器的位置)

那么这里有个问题:

单例这个事情,还需要设计模式吗?

当我们写代码的时候,只给这个类new一次对象,不去new多次不就行了?

实际上,设计模式是非常必要的,这其实上是属于设计模式,这完全就是取决于程序员的编程素养。

不过俗话说,宁可相信世界上有鬼,也不能相信人的这张破嘴!人是非常不靠谱的。

这样的思想方法在很多地方都会涉及到:

  1. final
  2. intreface
  3. @Override
  4. throws

于是此时就需要让编译器帮我们做监督,确保这个对象不会出现多个new(出现多个的时候就直接编译报错)

饿汉模式

类加载的同时, 创建实例.

// 饿汉模式
class Singleton{private static Singleton instance = new Singleton();//通过这个方法来获取到刚才的实例//后续如果想使用这个类的实例,都通过 getInstance 方法来获取public static Singleton getInstance(){return instance;}//把构造方法设置为私有,此时类外面的其他代码,就无法 new 出这个类的对象private Singleton(){}
}public class Demo21 {public static void main(String[] args) {//此外又有一个实例,这就不是单例了//Singleton s1 = new Singleton();Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);//true}
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

懒汉模式

相比于饿汉模式,他就比较从容,在第一次使用的时候,再去创建实例

//懒汉模式class SingletonLazy{private static volatile SingletonLazy instance = null;public static SingletonLazy getInstance(){if (instance == null) {if (instance == null) {instance = new SingletonLazy();}}return instance;}private SingletonLazy(){}
}public class Demo22 {public static void main(String[] args) {//此外又有一个实例,这就不是单例了//Singleton s1 = new Singleton();SingletonLazy s1 = SingletonLazy.getInstance();SingletonLazy s2 = SingletonLazy.getInstance();System.out.println(s1 == s2);//true}
}

在这里插入图片描述

我们举个例子:

文本编辑器

记事本

需要打开一个非常大的文件

  1. 先把所有的内容都加载到内存中,然后再显示内容(加载过程会很慢)
  2. 只加载一小部分数据到内存,立即显示内容,随着用户翻页,再动态加载其他内容(懒汉模式

那么这里我们抛出一个问题:

以上两种模式的写法,是否是线程安全的?(如果有多个线程,同时调用getInstance,是否会出问题?)

如果多个线程,同时修改同一个变量,此时就可能出现线程安全问题

如果多个线程,同时读取同一个变量,这个时候就没什么事情,不会有安全问题

那么我们看看饿汉模式的代码:

public static Singleton getInstance(){return instance;}

饿汉模式下的getInstance只是进行读取,不是修改,那么他也就没有线程安全的问题了~

那我们看看懒汉模式的代码:

if(instance == null){instance = new SingletonLazy();
}
return instance;

它既会读取,又会修改,就可能存在问题~

在这里插入图片描述

那么我们怎么保证懒汉模式是线程安全的呢?

类似于下面这种改法吗?

public static SingletonLazy getInstance(){if (instance == null) {synchronized (SingletonLazy.class) {if (instance == null) {instance = new SingletonLazy();}}}return instance;}

当然不是,我们要明确一个事情,就是:锁,不是加了就安全

加的位置对不对,才是关键

  1. 锁的{}的范围,是合理的,能够把需要作为整体的每个部分都囊括进去
  2. 锁的对象,也得是能够起到合理的锁竞争的效果

这样才是真正的加锁

所以修改如下:

public static SingletonLazy getInstance(){synchronized (SingletonLazy.class) {if (instance == null) {if (instance == null) {instance = new SingletonLazy();}}}return instance;}

ifnew合并成一个整体,此时的线程安全就迎刃而解了

不过一旦这么写的话,后续每次调用getInstance,都需要先加锁了

不过这种操作属实是画蛇添足了,加锁是一个开销很大的操作,加锁就可能会涉及到锁冲突 一冲突就会引起阻塞等待。

还有就是:一旦某个代码涉及到 加锁,那么基本上就可以宣告这个代码和“高性能”无缘了~

但是实际上,懒汉模式,线程安全的问题,只是出现在最开始的时候(对象还没开始new呢)

一旦对象new出来了,后续多线程调用getInstance,就只有读操作,就不会线程不安全了~

那么这里抛出一个问题:

是否有什么办法可以让代码线程安全,又不会对执行效率产生太多影响呢?

欲知后事如何,敬请期待下一篇博客~

主要是我临时有事,等明天写完再更😥😥😥😥😥😥😥😥😥

在这里插入图片描述

http://www.hkea.cn/news/929402/

相关文章:

  • 免费表白网站制作seo网络优化推广
  • 网站建设中可能升级中国科技新闻网
  • 网站制作内容文案网站如何快速被百度收录
  • 淘宝淘宝网页版登录入口免费seo公司
  • 竹溪县县建设局网站短视频营销
  • 好的网站有哪些搜索引擎seo是什么意思
  • 做音乐网站赚钱吗做小程序的公司
  • 坪地网站建设域名流量查询工具
  • 网站建设部署万能推广app
  • 网站的重要性怎么做个网站
  • 做网站的经验百度旗下有哪些app
  • 化工网站开发推广点击器
  • 怎么访问日本竹中建设网站外贸seo推广
  • 惠阳建设局网站引流推广接单
  • 北京通州网站建设公司如何建立公司网站网页
  • 网站换程序301seo优化按天扣费
  • html5 网站自适应长尾关键词挖掘爱站工具
  • 网站设计公司(信科网络)潍坊网站定制模板建站
  • 番禺网站开发报价百度竞价排名软件
  • 做企业网站接单seo网站优化技术
  • 建设网站行业云网络推广理实一体化软件
  • 如何用自己公司网站做邮箱关键字是什么意思
  • 古典网站建设欣赏马鞍山网站seo
  • 商城网站建设报价方案免费建网站软件下载
  • 中国做美国酒店的网站好竞价托管收费标准
  • 网站开发与设计静态网页源代码站长之家app下载
  • 松原做网站app运营推广是干什么
  • 做简单的网站链接2024新闻热点摘抄
  • 百度网站站长环球网疫情最新
  • 颍上做网站西安seo网站关键词优化