首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

<<设计模式精讲>>多线程上的单例模式

2012-09-01 
设计模式精讲-多线程下的单例模式class Singleton{ private static Singleton instance private Sing

<<设计模式精讲>>-多线程下的单例模式
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:也就是只要它能够达到和严格顺序执行一样的效果,指令执行的顺序可以随便安排.

热点排行