单例模式
来源:互联网 发布:手机网络加速器官 编辑:程序博客网 时间:2024/06/06 11:39
在这里,构造函数要设置为private ,否则我们没有限制它new的理由。
GetInstance是static的,因为我们从来不通过对象来调用这个方法。进而导致了instance域也变成了static,因为是在static方法中使用。
多线程时的单例
在多线程中,多个线程访问GetInstance方法,可能是能造成多个实例被产生的。因为两个线程可能都同时通过了instance==null的判断
但是这样会造成性能问题。这样使得每个调用GetInstance的情况都进行了排队。
下面我们进行改良。
在这里,如果已经产生了实例,我们让它返回,对于instance为null的情况,我们进行加锁,但是在里面为什么还要再进行一次判断呢。
因为两个线程可能同时经过了instance==null的判断,到了lock那里,开始排队,当一个线程实例化之后,如果没有第二次判断,那么第二个线程还是可以在进入临界区后再创建一个实例,所以我们要再判断一次,这叫Double-Check Locking.
还有一种方法,可以不写线程安全的代码,也可以解决多线程环境下的安全问题。
这种方式生成单例的时间比较早,是在类加载的时候就会生成,而前面叙述的是在调用GetInstance方法的时候才会被调用。所以我们称前面叙述的那一种为懒汉式单例类,而后面的那一种为饿汉式单例类。
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- C#连接SQLServer的字符串说明
- F28335 ePWM模块使用总结
- time函数的详细解析
- 条件语句不要嵌套太多层次
- flex 绑定资源
- 单例模式
- C#连接SQLite字符串
- 使用VC++操作Excel文件
- 托盘图标
- WinCE X86 安装 Boot
- 2011.05.14_“青春不再,梦想何处安”的种种
- KM+SLACK 优化 区别于 hyc 小牛
- 你所不知道的高级网页技术!silverlight
- Firmware