论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
职场与人生
›
IT职场那些事
›
【剑指Offer解法总结】面试题2:实现Singleton模式(1), ...
【剑指Offer解法总结】面试题2:实现Singleton模式(1),2024年最新java高级 ...
王國慶
论坛元老
|
2025-5-6 15:09:33
|
显示全部楼层
|
阅读模式
楼主
主题
1998
|
帖子
1998
|
积分
5998
先自我先容一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数步伐员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易遇到天花板技能停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望可以大概帮助到想自学提升又不知道该从何学起的朋侪。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比力多,这里只是将部分目录截图出来,全套包罗大厂面经、学习条记、源码讲义、实战项目、大纲门路、讲解视频,而且后续会连续更新
假如你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
}
该实现中,私有静态变量instance被延迟实例化,这样做的长处是,假如没有效到该类,那么就不会实例化instance,从而节约资源。 这个实现在多线程环境下是不安全的,假如多个线程可以大概同时进入 if (instance == null) ,而且此时 instance 为 null,那么会有多个线程实验 instance = new Singleton(); 语句,这将导致实例化多次 instance。
方法二:懒汉式–同步方法–线程安全
public class Singleton2{
private static Singleton2 instance;
//私有化构造器,不让外部创建实例
private Singleton2(){
}
//提供公共的方法让外部获取实例
//同步方法包管线程安全
public static synchronized Singleton2 getInstance(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
只需要对 getInstance() 方法加锁,那么在一个时间点只能有一个线程可以大概进入该方法,从而克制了实例化多次 instance。 但是当一个线程进入该方法之后,其它试图进入该方法的线程都必须等候,即使 instance 已经被实例化了。这会让线程阻塞时间过程, 因此该方法有性能问题,不推荐使用。
方法三:懒汉式–双重校验锁–线程安全
public class Singleton3{
private volatile static Singleton3 instance;
//私有化构造器,不让外部创建实例
private Singleton3(){
}
//提供公共的方法让外部获取实例
//双重校验锁
public static synchronized Singleton3 getInstance(){
if(instance==null){
synchronized (Singleton3.class){
if(instance==null){
instance=new Singleton3();
}
}
}
return instance;
}
}
instance 只需要被实例化一次,之后就可以直接使用了。加锁操作只需要对实例化那部分的代码进行,只有当 instance 没有被 实例化时,才需要进行加锁。 双重校验锁先判断 instance 是否已经被实例化,假如没有被实例化,那么才对实例化语句进行加锁。
思量下面的实现,也就是只使用了一个 if 语句。在 instance == null 的情况下,假如两个线程都实验了 if 语句,那么两个线程都会进入 if 语句块内。虽然在 if 语句块内有加锁操作,但是两个线程都会实验 instance = new Singleton(); 这条语句,只是先后的问题,那么 就会进行两次实例化。因此必须使用双重校验锁,也就是需要使用两个 if 语句。
if(instance==null){
synchronized (Singleton3.class){
if(instance==null){
instance=new Singleton3();
}
}
}
instance 采用 volatile 关键字修饰也是很有须要的。instance = new Singleton(); 这段代码实在是分为三步实验。
1. 为 instance 分配内存空间
2. 初始化 instance
3. 将 instance 指向分配的内存地址
但是由于 JVM 具有指令重排的特性,实验顺序有可能变成 1>3>2。指令重排在单线程环境下不会出先问题,但是在多线程环境下会导致一个线 程得到还没有初始化的实例。例如,线程 T1 实验了 1 和 3,此时 T2 调用 getInstance() 后发现 instance 不为空,因此返回 instance,但此时 instance 还未被初始化。
使用 volatile 可以克制 JVM 的指令重排,包管在多线程环境下也能正常运行。
方法四:饿汉式–线程安全
public class Singleton4 {
private static Singleton4 instance=new Singleton4();
分享
这次面试我也做了一些总结,确实还有很多要学的东西。干系面试题也做了整理,可以分享给大家,相识一下面试真题,想进大厂的大概想跳槽的小伙伴不妨好好利用时间来学习。学习的脚步一定不能克制!
Spring Cloud实战
Spring Boot实战
面试题整理(性能优化+微服务+并发编程+开源框架+分布式)
网上学习资料一大堆,但假如学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。
需要这份系统化的资料的朋侪,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才气走的更远!不论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都欢迎加入我们的的圈子(技能交换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
再深入研究,那么很难做到真正的技能提升。**
需要这份系统化的资料的朋侪,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-MTWBRGxA-1713438864348)]
一个人可以走的很快,但一群人才气走的更远!不论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都欢迎加入我们的的圈子(技能交换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
论坛元老
这个人很懒什么都没写!
楼主热帖
webman
不想打开 IDE 的摆烂一天
Jupyter Notebook,太强大了
React技巧之发出http请求
【网络】https单向认证和双向认证 ...
【Shashlik.EventBus】.NET 事件总线, ...
APP内存管理
Apache DolphinScheduler 3.0.0 正式版 ...
Bluecmsv1.6-代码审计
java如何显示"html转义字符"对应的原始 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表