多线程-- 三.安全发布对象和单例模式举例

发布对象:    使一个对象能够被当前范围之外的代码所使用

对象逸出:    一种错误的发布.当一个对象还没有构造完成时,就使它被其它线程所见.

 

安全发布对象4种方法:

1.在静态初始化函数中初始化一个对象引用.

2.将对象的引用保存到volatile类型域或者AtomicReference对象中.

3.将对象的引用保存到某个正确构造对象的final类型域中.

4.将对象的引用保存到一个有锁保护的域中.

 


 

单例模式

1.懒汉模式

单例实例在第一次使用时进行创建

这种写法在单线程环境下没问题的,但是在多线程环境下会出现问题.线程不安全

原因是如果有多条线程同时访问的话,可能会被调用两次,那么两条线程拿到的实例是不一样的

 

懒汉模式改造为线程安全

①.只要把工厂方法加上synchronized修饰就可以,这样就保证这个方法在同一时间内只能被一条线程所执行,即保证了线程安全.但是并不推荐,因为也带来了性能问题.

②.用双重检测机制+volatile,改造为线程安全

 

2.饿汉模式

单例实例在类装载的时候进行创建,可以保证线程的安全

但是,如果构造方法中存在过多的处理,会导致类加载的时候特别慢,可能引起效率问题.

 

3.枚举模式(最安全的)

最推荐的这种模式

 

 

 

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值