JavaEE初阶(5)——单例模式

ChatBI实战:如何用Vanna和WrenAI搭建企业级智能问数系统(附避坑指南) 本文详细介绍了如何利用Vanna和WrenAI搭建企业级智能问数系统(ChatBI),解决多源异构数据整合、语义理解准确率和系统性能安全等核心挑战。通过实战案例和优化策略,展示了这一组合方案在提升查询效率、实现业务自主分析和动态探索式分析方面的显著优势,特别适合企业级数据查询需求。 阅读详情

1.序言

本文旨在 开始讨论 多线程的代码案例编写——设计模式

单例模式是一种设计模式,属于程序员的棋谱

可以提高新手的下限

  • 框架——硬性要求
  • 设计模式——软性要求

都是为了更容易编写代码——“呆板” 对于程序员来说 是褒义词

1.1单例模式

单例模式是设计模式中 最典型的模式,比较简单,校招最容易考

单例:单个实例(对象)

强制要求,某个类,在某个程序中,只有唯一一个实例(不允许创建多个实例 new 多次)

1.2饿汉模式

饿——急迫  尽量早创建实例

//饿汉模式
class Singleton{
    private static Singleton instance =new Singleton();

    public static Singleton getInstance(){
        return instance;
    }
    private Singleton(){

    }
}

代码解释

private static Singleton instance =new Singleton();

静态成员的初始化,是在类加载的阶段触发的

类加载往往就是在程序一启动就触发——体现出急迫

public static Singleton getInstance(){
    return instance;
}

后续通过getIstance() 方法获取实例

private Singleton(){

}

单例模式的点睛之笔——在类外进行new操作 都会编译失败

s1 s2 引用同一个对象  结果为true

无法创建额外对象——实现单例模式

1.3懒汉模式

懒——尽量晚创建实例(甚至可能不创建了)         延迟创建

懒 意味着高效率

假设有一个大型文件(千万字的小说)

编辑器打开 方式二选一

  1. 把所有的内容,都从文件加载到内存中,都显示——明显卡顿 用户无法短时间全部接受
  2. 只把一部分内容加载并显示——后续如果用户翻页 随时加载后续数据

代码解释:

class Singletonlazy{
    private static  Singletonlazy instance =null;

    public static Singletonlazy getInstance() {
        if (instance == null) {
            instance = new Singletonlazy();
        }
        return instance;
    }
    private Singletonlazy(){

    }
}
public static Singletonlazy getInstance() {
    if (instance == null) {
        instance = new Singletonlazy();
    }
    return instance;
}

懒汉模式下——实例的创建时机是 第一次使用  (不是程序启动时)

2.保证线程安全下的单例模式

上文的饿汉 懒汉模式代码 是否线程安全?如果不是 该怎么办——【经典面试题】

2.1饿汉模式

饿汉模式中——String 不可变对象 天然线程安全

2.2懒汉模式

条件修改 是非原子操作 会造成 线程不安全

2.2.1懒汉模式的优化步骤:

1.先为条件修改操作 加锁

创建锁对象 locker 使用sychronized

2. 添加 判断是否需要加锁

此处两个IF 判断条件 含义不同 ——恰好条件相同

第一个IF 是判断 是否需要加锁 执行加锁操作

第二个IF 是判断 是否需要创建实例 

3.避免 内存可见性问题——添加Volatile

既然线程存在 对 instance 的修改操作 

容易存在 T1线程读取instance         T2线程进行修改  的情况

故 为 instance 添加volatile 关键字

Volatile的作用有两方面:

  1. 确保每次读取操作都是读内存,
  2. 关于该变量的读取和修改操作,不会触发重排序
instance = new Singletonlazy(); 此处代码容易 出问题

4.优化小结

优化步骤如图所示

论文分享|ECCV2022,PATnet,Cross-Domain Few-Shot Semantic Segmentation,CDFSS新基准,文末有复现教程 这篇论文提出的跨域小样本语义分割(CD-FSS)任务,旨在将源域学习的分割能力迁移到目标域,仅需少量标注样本。针对传统小样本分割方法在跨域场景性能下降的问题,作者提出了基于金字塔锚点变换的网络(PATNet),通过将域相关特征转换为域无关特征,并引入任务自适应微调推理(TFI)提升目标域适应能力。实验表明,PATNet在1-shot和5-shot设置下分别比现有方法提升8.49%和10.61%的准确率。同时,作者构建了CD-FSS基准并设计了任务难度评估指标。代码和数据集已开源,复现难度中等。 阅读详情

相关推荐

【影像组学】用3Dslicer或Python提取影像组学特征

用3Dslicer或Python提取影像组学特征

abdslfwoeugp 1万+

【javaEE】多线程初阶(Part5单例模式)

1. 单例模式在校招中常考 2. 单例模式的面试题: ① synchronized锁加在哪里? ② 两层if是什么意思? ③ 为什么volatile不能少? 3. 代码实现 4. 懒汉模式+饿汉模式

Xian meng在努力呐-的博客 407

利用arpspoof + sslStrip尝试进行arp欺骗

利用arpspoof + sslStrip尝试进行arp欺骗

qq_63575829的博客 352

【JavaEE初阶】多线程(5 单例模式 \ 阻塞队列)

如有错误,欢迎指出~

2301_80898480的博客 1260

机械臂的运动学分析-工业机器人

机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。

qq_59137727的博客 6648

从原理图到GDSII:Virtuoso+Pcell实战避坑指南(以TSMC65nm振荡器为例)

本文以TSMC65nm工艺下的振荡器设计为例,详细解析了Virtuoso环境中Pcell的最佳实践方案,涵盖变量管理、版图设计、Calibre验证等关键环节。通过实战案例和避坑指南,帮助工程师高效完成从原理图到GDSII的转化,特别针对LVS验证和参数化单元设计提供了实用解决方案。

fff88的博客 899

JavaEE初阶——多线程(5)单例模式和阻塞队列

摘要: 本文主要介绍了两种重要的编程模式:单例模式和阻塞队列。单例模式部分详细阐述了饿汉模式、懒汉模式(单线程和多线程环境)以及双重检查锁的实现方式,重点解决了多线程环境下的线程安全问题。阻塞队列部分讲解了其基本概念、生产者消费者模型、标准库实现方法及应用场景(解耦、削峰填谷、异步操作),并提供了自定义阻塞队列的完整实现代码。文章采用理论讲解与代码示例相结合的方式,既阐述了设计原理,又提供了实际应用场景的解决方案,对提高程序设计的可靠性和效率具有重要参考价值。

Yoko_999的博客 1245

瑞萨单片机,把CS文件转换为CC

1、打开CC的软件: 点击坐上角的"START" 点击"Create New Project"的"GO": 导入工程: 如下图设置后,点击"Create" 2、进入到CC的开发界面: 可以看到原启动库文件以asm文件的方式直接出现在工程中: 删除新生成的main.c,保留导入的r_main.c(以你自己的代码为准): 注意添加所有的头文件路径: 点击"...

weixin_37611121的博客 1228

javaEE5.0与J2EE1.4比较

<br />在新建web工程时,如果选的是javaEE5自带的jstl,仅能够使用tomcat6.x才能正常使用el <br />如果选的是j2ee1.4或者j2ee1.3时,需要手动添加jstl, <br />默认与tomcat5.x兼容,所以你修改一下web.xml,因为javaEE5.0和j2ee1.4,1.3是不一样的 <br />所以对jstl和el的支持也并不相同! <br />------------------------------------------<br />在新建web工程时,如

gyflyx的专栏 5198

Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

IAYLBL的博客 695

Python爬虫实战:使用Scrapy+Playwright高效爬取全球专利数据库

本文将详细介绍如何使用Python最新技术栈(Scrapy+Playwright)构建一个高效的专利数据库爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、分布式爬虫架构以及数据存储方案,最终实现一个完整的专利数据采集系统。专利数据是技术创新领域的重要信息资源,包含技术描述、权利要求、申请人信息等宝贵数据。中国国家知识产权局(CNIPA)美国专利商标局(USPTO)欧洲专利局(EPO)世界知识产权组织(WIPO)

2201_76125261的博客 1382

javaEE初阶————计算机是如何工作的

计算机中最重要的“软件”不同的操作系统之间是不兼容的,一个软件在Linux能运行但是在Windows就不行了,但是我们java怎么说来着,一次运行,到处运行?还是啥来着,反正因为java的虚拟机,java给各种主流系统都开发了一个虚拟机,jvm牛批(后面再舔)哈哈哈哈哈。我们来介绍主流的操作系统WindowsLinuxMacIOSAndroid还有不断完善的鸿蒙操作系统;

2301_79083481的博客 2370

DDPM代码详细解读(2):Unet结构、正向和逆向过程、IS和FID测试、EMA优化

Diffusion Models专栏文章汇总:入门与实战 前言:大部分DDPM相关的论文代码都是基于《Denoising Diffusion Probabilistic Models》和《Diffusion Models Beat GANs on Image Synthesis》贡献代码基础上小改动的。官方的DDPM是tensorflow TPU版本,暂时没有GPU的版本。上一篇文章介绍了数据集加载,超参数的含义、关键参数的计算方法等,这一篇重点解读一下网络结构。 目录 EMA优化 训练目标.

沉迷单车的追风少年 1万+

起源之路——JSR?J2EE?JavaEE?

起源之路——JSR?J2EE?JavaEE? 前言 鉴于自己工作了一段时间对各种框架中间件处于知其然不知其所以然的状态中,所以萌生了追寻起源的想法,于是便开始准备编写该系列文章,系统的整理自己对J2EE的理解。若有发现理解不到位,或有不同见解的地方,欢迎各位大神拍砖。 什么是J2EE? J2EE的全称是Java 2 Platform Enterprise Edition,它是由多家公司共同参与并制...

LuoGuoHua_Xin的博客 882

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

javaEE和j2EE一样吗?

javaEE和j2EE一样吗?从JDK 5.0开始 J2EE 改名为 java EE,J2SE 改名为 java SE,J2ME 改名成 java ME,其实是一回事,只是叫法改了而已java EE 是java的企业版,主要面向web应用,尤其是企业级开发,都提供了一套开发流程。(这句话个人感觉不好理解.)    1,JavaEE是标准集定义的技术架构    2,企业开发是一个面向企业开发的技术组...

dhtcdh的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

javaEE初阶————多线程初阶(5)

本期是多线程初阶的最后一篇文章了,下一篇就是多线程进阶的文章了,大家加油!

2301_79083481的博客 1966

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《JavaEE初阶》Servlet

《JavaEE初阶》Servlet 编写一个Servlet的helloworld 1. 认识Maven并创建maven项目: Maven是一个"构造工具",它能针对代码进行依赖管理,编译,打包,验证,部署等功能. 在我们之前学习的代码较为简单,并不需要进行打包. 而在一个复杂的项目中,依赖许多的第三方库,并且可能有多个模块,模块与模块之间存在依赖关系,这个时候就可以将Maven作为一个针对复杂项目进行管理的解决方案. 在Java中,也有其他构建工具,但Maven是当下最主流的构建工具.当然其他语言也有自己的

simple_person的博客 1730

J2EE是什么,主要包括哪些技术

https://blog.youkuaiyun.com/Ashes18/article/details/73614571 最近最为深刻的认识:被面试老师问到了的知识,哪些是在自己心中模棱两可,似是而非的概念都一目了然。而后,只有在顿悟中不断总结才能进步。今天,我总结的部分是J2EE到底是什么东西,它包括了哪些技术。 一、J2EE是什么? 从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它...

QDShuai的博客 3万+

框架——JavaEE(J2EE)相关

1、什么是JavaEE? Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE(这个名称应该还没有得到群众认可)。 狭义的 Java EE 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架,也可以说是一种规范。 广义的 Java EE 包含各种框架,其中最重要的就是 Spring 全家

weixin_42924812的博客 1107

J2EE

J2EE是什么,主要包括哪些技术 一、J2EE是什么? 从整体上讲,J2EE 是使用 Java 技术开发企业级应用的工业标准,它是 Java 技术不断适应和促进企业级应用过程中的产物。 适用于企业级应用的 J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的 开发、管理和部署。J2EE 是一个标准,而不是一个现成的产品。(来自百度) 二、J2EE主要包括哪些技术 servlet Servlet是java平台上的CGI技术。Servlet在服务器端运行,动态地生成

qq_42918433的博客 8209

【JavaEE初阶】春风若有怜花意,可否许我再少年?- (重点)线程

本篇博客给大家带来的是线程的知识点, 由于时间有限, 分三天来写, 本篇为线程第三篇,也是最后一篇.🐎文章专栏: JavaEE初阶🚀若有问题 评论区见❤如果你不知道分享给谁,那就分享给薯条.你们的支持是我不断创作的动力 .王子,公主请阅🚀1. 多线程案例1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式(单线程)1.1.3 懒汉模式(多线程)2. 阻塞队列2.1 什么是阻塞队列?2.2 生产消费模型2.3 Java标准库中的阻塞队列2.4 自实现阻塞队列。

薯条不要番茄酱的博客 2024

javaee和javaee_JavaEE概念简介

javaee和javaee 这篇文章旨在阐明J2EE范例中使用的首字母缩写词和概念。 J2EE代表Java to Platform,Entreprise Edition。 它使创建模块化Java应用程序得以部署在应用程序服务器上。 它依赖于Java SE,Java SE是一组Java库的核心,所有Java应用程序都在该Java库上实现。 一般概念 在深入探讨J2EE之前,这里提醒您一些一般...

最佳 Java 编程 715

如何从Maven下载J2EE API(javaee.jar)

java.net下的javaee.jar解决方案仅包含J2ee API,不包含任何方法主体。 编译是很好的选择,但不适用于运行或部署您的应用程序,因为它会导致“ 类中不是本机或抽象类的方法中的 “ 缺少代码”属性 ”或其他未找到的错误。 根据政策,不可能在任何公共Maven存储库中包含此javaee.jar 。 最佳做法是始终从http://www.oracle.com/technetwork...

一名可爱的技术搬运工 788

J2EE的体系架构——J2EE

https://blog.youkuaiyun.com/dandanzmc/article/details/27355565 J2EE的体系架构 J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。 J2EE分层 客户层,运行在客户计算机...

try to do 1万+

JavaEE(J2EE)学习篇

一、简要介绍 Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为 Jakarta EE, 是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件,可以说是一个框架或是一种规范。 Java EE是 J2EE的一个新的名...

nann-viiv 的博客 925

JavaEE初阶2.0

多线程1.0~

2301_81348189的博客 1219
上一篇: JavaEE初阶(4)——线程安全
下一篇: JavaEE初阶(6)——自定义阻塞队列
FrantF
博客等级 码龄3年 5粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值