读书人

lt;lt;设计模式精讲gt;gt;多线程上的单例模式

发布时间: 2012-09-01 09:33:02 作者: rapoo

<<设计模式精讲>>-多线程下的单例模式
class Singleton{
private static Singleton instance;
private Singleton(){}
private synchronized static void doSync(){
if(instance == null) instance = new Singleton();
}
public static Singleton getInstance(){
if(instance == null) doSync();
return instance;
}
}
在java的多线程情况下不能保证Singleton的正确性,原因如下:
(1)java内存管理指出,只在两个线程在同一个对象上进行同步时,它才会保证一个线程B能够看到另一个线程A的改变,从而使得A线程的synchronized块对线程B变为原子(要么什么也不变,要么什完全改好).
(2)java并不是一中顺序执行语言.我们会想象程序的执行会按照源代码的顺序执行.但是java并不是如此.java 对编译器和虚拟机的要求满足as-if-serial:也就是只要它能够达到和严格顺序执行一样的效果,指令执行的顺序可以随便安排.

读书人网 >软件开发

热点推荐