设计模式之四--单例模式

茴字有很多种写法,推荐用枚举。不多讲。讲一下各种写法的区别以及牵涉到的理论知识点。

Q:为什么要保证线程安全?
A:如果线程不安全,将会失去单例的意义,也就是说会产生不止一个实例。同时也可能引起程序报错等其他错误。

知识点:线程安全的本质。简单讲线程不安全,是因为有些资源是线程共用的(比如进程数据、代码、堆、栈)。不同的线程操作同一个对象,当然就不安全了。

Q:怎样保证线程安全?
A:保证实例化(比如构造方法)只执行一次,那么就只会产生一个实例,那你怎么拿 都是同一个。

Q:怎样保证只实例化一次呢?
A:炫技时刻到了,N多种写法,分别用了:枚举类加载时会执行一次,静态代码加载时会执行一次,class文件唯一次等知识点。有兴趣的朋友可以搜索相应文章学习。

知识点:类加载顺序-->静态代码(仅一次),构造代码(每次实例化调用),构造方法(每次实例化调用),普通代码(实例对象正常调用)。
那么,静态方法呢?
答:静态方法归属类,不归属对象,在内存中会存在元数据区(顺便学习jvm的内存模型),只能由类直接调用。仅此。

同时,我不禁想到了另一点,那就是,spring对bean的管理,默认都是单例的。那是不是提供了另一个单例思路??
方式:私有构造方法,并且禁止反射获取(具体方法另说),每次使用都用注解注入,或者都用factory去拿,即可保证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值