做视频网站软件长春网站制作设计

web/2025/9/28 17:51:11/文章来源:
做视频网站软件,长春网站制作设计,免费制作网站和网页,三语网站建设1. 单例模式 单例模式是一种设计模式#xff0c;设计模式是我们必须要掌握的一个技能#xff1b; 1.1 关于框架和设计模式 设计模式是软性的规定#xff0c;且框架是硬性的规定#xff0c;这些都是技术大佬已经设计好的#xff1b; 一般来说设计模式有很多种#xff0c;…1. 单例模式 单例模式是一种设计模式设计模式是我们必须要掌握的一个技能 1.1 关于框架和设计模式 设计模式是软性的规定且框架是硬性的规定这些都是技术大佬已经设计好的 一般来说设计模式有很多种且不同的语言会有不同的设计模式同时设计模式也可以理解为对编程语言的一种补充 1.2 细说单例模式 单例 单个实例对象 某个类在一个线程中只应该创建一个实例化对象原则上不应该有多个这时就使用单例模式如此可以对我们的代码进行一个更严格的校验和检查。 保证对象唯一性的方法 方法一可以通过“协议约束”写一个文档规定这个类只能有唯一的实例程序员在接手这个代码时就会发现这个文档已经进行约定其中的规定约束着程序员在创建对象时时刻注意只能创建一个对象。 方法二从机器入手让机器帮我们检查我们期望让机器帮我们对代码中指定的类创建类的实例个数进行检查、校验当创建的实例个数超过我们期望个数就编译报错。其中单例模式就是已经设计好的套路可以实现这种预期效果。 关于单例模式代码实现的基本方式有两种饿汉模式和懒汉模式 2. 饿汉模式 饿汉模式是指创建实例的时期非常早在类加载的时候程序一启动就已经创建好实例了使用 “饿汉”这个词就是形容创建实例非常迫切非常早。单例模式代码如下 class Singleton {private static Singleton instance new Singleton();public static Singleton getInstance() {return instance;}private Singleton(){ } } public class TestDemo4 {public static void main(String[] args) {Singleton singleton new Singleton();} } 当我们运行该代码时系统就会报错接下来我们详细的分析一下此处的代码  这样如果我们想new一个Singleton对象也new不了同时不管我们用getInstance获取多少次实例获取的对象都是同一个对象代码如下 package thread;// 就期望这个类只能有唯一的实例 (一个进程中) class Singleton {private static Singleton instance new Singleton();public static Singleton getInstance() {return instance;}private Singleton() {} }public class ThreadDemo26 {public static void main(String[] args) {// Singleton s new Singleton();Singleton s Singleton.getInstance();Singleton s2 Singleton.getInstance();System.out.println(s s2);} }结果如下 3. 懒汉模式 和饿汉模式不一样的是懒汉模式创建实例的时机比较晚没饿汉创建实例那么迫切只有第一次使用这个类时才会创建实例代码如下 class SingletonLazy {private static SingletonLazy instance null;public static SingletonLazy getInstance() {if(instance null) {instance new SingletonLazy();}return instance;}private SingletonLazy() { } } public class TestDemo5 {public static void main(String[] args) {} } 下面为代码图解分析 和饿汉模式的区别就是没那么迫切创建实例等需要调用这个类的时候才创建一个实例而饿汉模式是有了这个类就创建出实例。 懒汉模式的优点有的程序要在一定条件下才需要进行相关的操作有时候不满足这个条件也就不需要完成这个操作了如此哦·就把这个操作省下来了。 4. 两种模式关于线程安全 4.1 饿汉模式 线程安全 对于饿汉模式来说上图所示通过调用getinstance方法来返回instance对象本质上来说是读操作 当有多个线程同时并发执行调用getInstance方法取instance这时线程是安全的因为只涉及到读多线程读取同一个变量是线程安全的。而instance很早之前就已经创建好了不会修改它一直也只有这一个实例也不涉及写的操作。 4.2 懒汉模式 线程不安全 在懒汉模式中条件判定和返回时是读操作new一个对象是写操作 我们只有调用getInstance方法后就会创建出实例来如果多个线程同时调用这个方法此时SingletonLazy类里面的instance都为null那么这些线程都会new对象就会创建多个实例。这时就不符合我们单例模式的预期了所以这个代码是线程不安全的。 线程不安全的直接原因就是 “写” 操作不是原子的。 4.3 解决懒汉模式的线程安全问题 4.3.1 把写操作打包成原子 因为多线程并发执行的时候可能读到的都是instance null所以会创建多个实例那我们就给它加锁让它在创建实例的时候只能创建一个加锁代码如下 class SingletonLazy {private static Object locker new Object();private static SingletonLazy instance null;public static SingletonLazy getInstance() {synchronized (locker) {if(instance null) {instance new SingletonLazy();}}return instance;}private SingletonLazy() { } } 以上操作虽然将写操作打包成了一个原子但是新的问题也出现了 4.3.2 去除冗余操作 上述操作加上了还是有问题如果已经创建出实例了我们还有加锁来判断它是不是null吗加锁这些操作也是要消耗硬件资源的没有必要为此浪费资源空间如果已经不是null了我们就想让它直接返回不再进行加锁操作代码修改如下 class SingletonLazy {private static Object locker new Object();private static SingletonLazy instance null;public static SingletonLazy getInstance() {if (instance null) {synchronized (locker) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy() { } } 代码图解分析两个判断语句的是目的意义 4.3.3 指令重排序的问题 指令重排序指令重排序也是编译器的一种优化在保证原代码的逻辑不变调整原代码的指令执行顺序从而让程序的执行效率提高。 保证原代码的逻辑不变改变原有指令的顺序从而提高代码的执行效率其中这个代码就存在着指令重排序的优化如下图代码 该语句原本指令执行顺序         1、去内存申请一段空间         2、在这个内存中调用构造方法创建实例         3、从内存中取出地址赋值给这个实例instance。 指令重排序后的顺序1, 3 , 2按照指令重排序后的代码执行逻辑就变成了下面所示         假设有两个线程现在执行顺序如下图所示         因为指令重排序后先去内存申请一段空间然后是赋值给instance那这时instance就不是null了第二个线程不会进入到if语句了直接返回instance可是instance还没有创建出实例这样返回肯定是有问题的如此也就线程不安全了。         解决方案         给instance这个变量加volatile修饰强制取消编译器的优化不能指令重排序同时也排除了内存可见性的问题。         加volatile后的代码如下   class SingletonLazy {private static Object locker new Object();private static volatile SingletonLazy instance null;public static SingletonLazy getInstance() {if (instance null) {synchronized (locker) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy() { } }         至此我们才算解决掉懒汉模式关于线程安全的所有问题 4.4 懒汉模式线程安全的代码 package thread;// 懒汉的方式实现单例模式. class SingletonLazy {// 这个引用指向唯一实例. 这个引用先初始化为 null, 而不是立即创建实例private volatile static SingletonLazy instance null;private static Object locker new Object();public static SingletonLazy getInstance() {// 如果 Instance 为 null, 就说明是首次调用, 首次调用就需要考虑线程安全问题, 就要加锁.// 如果非 null, 就说明是后续的调用, 就不必加锁了.if (instance null) {synchronized (locker) {if (instance null) {instance new SingletonLazy();}}}return instance;}private SingletonLazy() { } }public class ThreadDemo27 {public static void main(String[] args) {SingletonLazy s1 SingletonLazy.getInstance();SingletonLazy s2 SingletonLazy.getInstance();System.out.println(s1 s2);} }结果如下 ps:本次的内容就到这里了如果感兴趣的话就请一键三连哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商丘市网站建设公司自己做的网站如何上传

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Visual ChatGPT? Visual ChatGPT 是一个包含 Visual Foundation 模型 (VFM) 的系统,可帮助 ChatGPT 更好地理解、生成和编辑视觉信息。VFM 能够指…

会议响应式网站开发卓商网站建设

算术运算、比较运算、赋值运算、位和位运算、运算优先级python里的算术运算我们最熟悉的计算就是算术运算,加减乘除等。在python的算术运算中,除了四则运算外,还有幂运算、取模、取整运算。什么是取模、取整运算呢?取模和取整运算…

做网站的价格参考怎么做网站的排名优化

2019年03月全国计算机等级考试山东科技大学(青岛校区)考点的报名工作于2018年12月22日9时至12月28日24时开始网上报名,请各位报考考生登录 http://www.sdzk.cn/zsks/NCREbm/Ncrebm.htm 进行网上注册并填报基本信息,信息正确无误后,进行网上缴费&#xff…

学校 网站建设工作小组想推网站目录源码

目录 引言 一、Requests库简介 二、安装与基本使用 三、requests库的特性与优势 四、requests库在实际应用中的案例 1.get请求 2.post请求 3.超时重试 4.headers设置 5.session会话 6.携带cookie​​​​​​​ 7.携带代理​​​​​​​ 8.携带身份认证​​​​​…

云南省网站备案高端定制网站开发需要多少钱

Thread类中的yeild方法有什么作用 谦让机制:Thread.yield()方法主要用于实现线程间的礼让或谦让机制。当某个线程执行到yield()方法时,它会主动放弃当前已获得的CPU执行权,从运行状态(Running)转变为可运行状态&#…

建网站要花多少钱跨境商城网站开发

目录 介绍 基本的 SRAM 存储单元阵列 1. SRAM 存储单元 2. SRAM 阵列 3. SRAM 阵列的读写操作 4. SRAM 阵列的扩展 5. SRAM 阵列的应用 6. SRAM 阵列的优缺点 基本的 SRAM 逻辑结构 1. 存储单元 2. 存储单元阵列 3. 译码器 4. 读写电路 5. 控制逻辑 6. SRAM 逻辑…

傻瓜式网页制作网站网站设计评价标准

mysql库编码修改,库默认的编码为拉丁文,我创建的agilefant库编码也就是拉丁文的 不支持中文。整个操作过程切记务必先备份库再操作。mysql> show variables like collation_%;-----------------------------------------| Variable_name | Value |---…

电子商务网站设计与管理中山做外贸网站建设

目录 一、概述 1.1 在开始之前 二、什么是TrustZone? 2.1 Armv8-M的TrustZone 2.2 Armv9-A Realm Management Ext

网站制作jian she自动化营销网站建设

文章目录 1 需求分析1.1 关键词 : 2、webhooks 是什么?3、配置步骤3.1 github 里需要的仓库配置:3.2 jenkins 的主要配置3.3 option filter配置用于匹配目标分支 实现指定分支构建 1 需求分析 一个项目一般会开多个分支进行开发,测试&#x…

海报设计素材网站免费济宁百度网站建设

R与RStudioR是一种统计学编程语言,在科学计算领域非常流行。它是由Ross Ihaka和Robert Gentleman开发的,是 "S "编程语言的开源实现。R也是使用这种语言进行统计计算的软件的名字。它有一个庞大的在线支持社区和专门的软件包,可以为…

住房城乡建设部执业资格注册中心网站wordpress百度站长验证

Guzzle HTTP客户端库提供了多种方式来进行鉴权,并且支持异步操作。以下是如何在Guzzle中执行鉴权和使用异步操作的示例: 1. 基本鉴权 Guzzle支持基本的HTTP基本认证(Basic Authentication)鉴权。您可以使用auth选项来指定用户名…

马鞍山建设工程监督站网站扬中网站网站建设

1.下载压缩包 官网地址:www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量:我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并,编辑my.ini文件 编辑内容如…

网站备案时长中文网站建设计划书

少时曾许凌云志,当取世间第一流 再见少年拉满弓,不惧岁月不飓风 —— 24.3.20 1.Linux的发展历史 2.VM虚拟机的Linux初体验 3.图形化页面设置系统——快速上手 4.命令行操作——向专业前进 5.核心操作命令——必知必会(管理企业级权限/定位b…

网站搜索关键词优化网站开发零基础培训学校

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

企业门户网站建设方案文档潮阳发布最新通告

文章目录 适配器模式介绍何时使用应用实例优点缺点使用场景 实现java实现rust 实现 rust代码仓库 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能…

网站域名使用期百度整站优化

booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序。下面的表格是我们假设2 作为乘数所进行的分析。接下来,我将用代码向大家阐述。 1、开始的时候在乘数2的‘负一位’加上一个默认0值00100 2、先判断[0:-1],结果是2‘b0…

做没有好的网站你懂的阿里云企业邮箱收费标准

题目链接 UVa12304 2D Geometry 110 in 1! 题意 这是一个拥有6(二进制是110)个子问题的2D几何问题集。 1 CircumscribedCircle x1 y1 x2 y2 x3 y3:求三角形(x1,y1)-(x2,y2)-(x3,y3)的外接圆。这3点保证不共线。答案应格式化成(x,y,r…

开发网站如何赚钱html的基本结构

我曾经听说过,过去人们为使方法具有单个出口点而奋斗。 我知道这是一种过时的方法,从未认为它特别值得注意。 但是最近,我与一些仍坚持该想法的开发人员进行了联系(最后一次是在这里 ),这让我开始思考。 因…

域名解析网站建设html5网站后台制作

​​题目来源: leetcode题目,网址:110. 平衡二叉树 - 力扣(LeetCode) 解题思路: 获得各位数字后,当较小的两个数字做为十位,较大的两个数字作为个位时所组成的两个两位数之和最小。…

网站流媒体播放如何做数字营销招聘

今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。我们都知道,图片格式当中有一种叫做svg,这种格式的图片无论我们将它放大多少倍,也不会失真更不会出现边缘模糊的情况。原因也很简…