Java设计模式:单例模式双检锁,volatile

本文是Java新手对单例模式和双检锁(DCL,Double-Checked Locking)的理解分享。作者指出,单例模式确保类只有一个实例,而双检锁用于保证在多线程环境下正确创建单例。通过生活中的买包子例子,解释了双检锁的工作原理,强调了volatile关键字的作用。文章旨在用简单易懂的方式帮助读者理解这些概念。

学习之前

作为Java萌新,真的很想吐槽。不懂的知识上网去搜,很多时候看到的是长篇大论,动不动就是底层,更离谱的是费劲九牛二虎之力看完了之后仍然是不明所以。因此决定把自己碰到的问题真正弄明白之后在这里记录下来,并以一种浅显易懂的方法表达出来,尽可能让部分人节省一些时间,当然对我自己也是一种提升。

一句话概括

单例模式

该类的对象只会被创建一个实例,多次获取到的都同一个栗子。

双检索

为了确保该对象的唯一性采取的措施。

volatile

多个线程访问同一变量情况下确保不会出错,不能保证线程安全。就是说在已经线程安全的情况下一样需要。

单例模式代码

 这个不重要,和很多帖子写的都一样,之前没看到过的好好看看。

双检索怎么保证栗子唯一的:

新手搞不懂双检索的原因大部分都是被这个唬人的名字给搞乱了,双检索听起来就好厉害。直接来看这个,我相信很大一部分人就能看懂了。

 生活中的栗子

如果还是不够清楚呢,生活中的例子应该更利于理解。现在想象你去买两个包子吃,第一个if就是包子店门口的大屏幕,上面显示卖完的时候我们就不进去了。但是就算我们进去了,就算锅里还有没有包子还是不能卖给我们。所以最终决定能不能买到包子实际上是营业员这里(锅里的包子数)决定的,外面加一个大屏幕的好处是我们不用再进入店里跟营业员浪费口舌。除非营业员小姐姐长得非常好看,这时候我是非常乐意的。但代码长得都是0和1这个鬼样子,真的没必要。

外面的这个判断加和不加对结果是没有影响的,但是不加上会影响代码的效率,每个线程都要执行synchronized这段代码的内容,而且加锁后的代码多个线程不能同时访问,就会更慢。

一直嫌弃别人解释的不清楚,不知道自己表达能力怎么样。
这是我个人的理解给大家分享一下,有问题或者还是不懂补充可以评论,我看到之后会及时回复。下次的学习心得会继续发的,新手赶紧看过来喽。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值