192.168.1.1-路由器设置 | 192.168.0.1-无线路由器设置

单实例模式和互斥访问的解决方法

发布时间:2014-12-31 11:35

场景说明:在实际的应用开发中,很多人没有注意到一点:在生成单实例的过程中,如果由线程去创建对象的实例,有可能在第一次检测到对象不存在的情况下,准备创建对象,此时由于多线程的缘故,恰巧当前线程被挂起,另一个线程同样执行到这个语句,于是创建一个对象,另一个线程冲睡眠中被唤醒,于是执行了创建对象,现在就有两个对象,完全背离了单实例的设计模式,

 

解决方法:

1)在主线程还没有创建多线程的时候,创建单实例,但是这里有一个问题:就不会达到延时加载的效果,变成了急剧加载,也就是说预先加载了对象,可能这个对象根本就没有在使用

2)在线程中创建对象的过程中,使用互斥锁,避免了变量的访问,所以我们在创建实例的时候加锁,并且在每次访问的时候检测对象是否为空。

关于我们 - RSS地图 - 最近更新 - 友情链接 - 网站地图 - 版权声明