为了账号安全,请及时绑定邮箱和手机立即绑定

模式的秘密---单例模式

难度中级
时长30分
学习人数
综合评分9.63
276人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.5 逻辑清晰
public class Sington1 {
private static volatile Sington1 sington1;

private Sington1() {
}

public static Sington1 getInsance() {

if (sington1 == null) {
synchronized (Sington1.class) {

if(sington1==null){
sington1 = new Sington1();
}

}
}
return sington1;
}

}
套路2字惟妙惟肖!如果说把编程比作是理发,那么设计模式就好比是寸头、平头、爆炸头、蘑菇头以及锅盖头等等头型!
java的套路来了
听到各位小伙伴们,才发现是刚看完的struts拦截器老师...
一听就是经验深厚的老师了
这里讲的线程不安全,主要是在判断是否创建了这个实例的代码块里。楼上很多赞的那个,提到的方法叫双重检查锁定。
问题根源是,instance = new Instance()可以分解成三行伪代码。正常的顺序是分配对象的内存空间->初始化对象->设置instance指向刚分配的内存地址。注意第2.3步会被重排序。这时候instance被分配了内存但是没有初始化。如果这时候有一个线程B来访问,他判断instance!=null后调用这个对象时发现对象没有初始化,就出现bug了~解决方案:1、Instance声明为volatile类型。2、允许重排序,但是重排序不被其他线程看到。
太好了,慕课网就是强
讲得不错 ,浅显易懂
。。。太浅了吧
讲得很好,demo通俗易懂,棒棒的
老婆多了会出问题???大家觉得那???
讲的好!有水平!
public class Singleton2 {

private Singleton2() {}

private static Singleton2 instance;

public static Singleton2 getInstance() {
if (instance == null) {
synchronized (Singleton2.class) {
if (instance == null) {
instance = new Singleton2();}}}
return instance;
}
}
饿汉模式:类加载的时候便进行了创建...
额...其实是因为static代码块的原因
一个类运行加载进入内存的时候 首先加载static静态代码块
可以搜索一下“考查静态语句块、语句块以及构造函数的执行顺序”
弄懂了就知道饿汉模式了
BTW:上面搜索的东西是一道Java面试题
课程须知
本课程是 Java 开发课程的高级课程,如果您是新手,建议先移步 《Java入门第一季》和《Java入门第二季》
老师告诉你能学到什么?
1、 了解设计模式 2、 理解单例模式的含义及应用场合 3、 掌握单例模式中饿汉模式和懒汉模式的使用 4、 理解两种模式的区别

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消