关于创建Singleton模式
看到有如下两种方法 
 不明白的地方是 
 为什么第二种方法只是第一次              
 使用时生成实例,提高了效率?? 
 倒是如何初始话的 
 恳望详解,谢谢!                 
   一般Singleton模式通常有几种种形式:         
   第一种形式:   定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。         
 public   class   Singleton   {       
   private   Singleton(){}       
   //在自己内部定义自己一个实例,是不是很奇怪?       
   //注意这是private   只供内部调用       
   private   static   Singleton   instance   =   new   Singleton();       
   //这里提供了一个供外部访问本class的静态方法,可以直接访问         
   public   static   Singleton   getInstance()   {       
     return   instance;            
      }       
 }         
   第二种形式:         
 public   class   Singleton   {       
   private   static   Singleton   instance   =   null;       
   public   static   synchronized   Singleton   getInstance()   {       
   //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次              
   //使用时生成实例,提高了效率!       
   if   (instance==null)       
     instance=new   Singleton();       
 return   instance;     }       
 }           
------解决方案--------------------标准的是第一种写法,应该说效率更高,不过是先初始化先在内存而已 
 第二种是第一次用的时候初始化,存在线程安全问题。   
 没有任何理由使用第二种方式,除非你的对象占用巨大的内存
------解决方案--------------------public class Singleton {   
   private Singleton(){}   
   //在自己内部定义自己一个实例,是不是很奇怪?   
   //注意这是private 只供内部调用   
   private static Singleton instance = new Singleton();   
   //这里提供了一个供外部访问本class的静态方法,可以直接访问     
   public static Singleton getInstance() {   
     return instance;      
    }   
 }   
 这个标准叫饿汉模型。 
 外部直接调用getInstance来得到这个类。只要外界有需求,我就加载一次这个类。 
 个人建议,再加上一个私有的构造函数,才能称得上完整地饿汉模型。   
  private static Singleton instance = null;   
   public static synchronized Singleton getInstance() {   
   //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次        
   //使用时生成实例,提高了效率!   
   if (instance==null)   
     instance=new Singleton();   
 return instance;   }   
 }   
 这个标准叫懒汉模型。就是说,这个类在整个应用中只会被加载一次,下次有人要加载的时候,先到内存中找,有没有该类的实例存在,如果没有,就new一个,如果有,就直接返回这个实例。   
 好像还有个模型的,不太记得了。 
------解决方案--------------------单例有五种写法,第一种就是上述的第二种,这种写法只是简单的实现单例而已。 
 第二种是在上一种上加线程锁,解决线程不安全问题。 
 第三种是在线程锁上再加一个if判定锁,解决线程锁损耗资源问题。 
 第四种就是上述的第一种写法,直接实例化。 
 第五中就是改进第四种的,是用一个内部类来解决延迟加载的问题,因为第四种是立即加载了。
------解决方案--------------------路过,学习.
------解决方案--------------------LZ看来对Singleton模式不是很理解啊,其实Singleton的作用就是为了安全,在WEB开发中大量采用这中模式,它是不允许客户端生成多个实例。 
 提示LZ一句,学习模式不是为了要用而去用,而是为了提供程序的质量,健壮。和学习模式处理问题的一种思想。
------解决方案--------------------public class Singleton {   
   private Singleton(){}   
   //在自己内部定义自己一个实例,是不是很奇怪?   
   //注意这是private 只供内部调用   
   private static Singleton instance = new Singleton();   
   //这里提供了一个供外部访问本class的静态方法,可以直接访问     
   public static Singleton getInstance() {   
     return instance;      
    }   
 }   
 这个标准叫饿汉模型。 
 外部直接调用getInstance来得到这个类。只要外界有需求,我就加载一次这个类。 
 个人建议,再加上一个私有的构造函数,才能称得上完整地饿汉模型。