正文

单态之饿汉,懒汉2011-03-11 11:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/1mi2/52306.html

分享到:

 饿汉式:   public class Singleton{   private static Singleton singleton = new Singleton ();   private Singleton (){}   public Singleton getInstance(){return singletion;}   }    懒汉式:   public class Singleton{   private static Singleton singleton = null;    private Singleton (){}   public static synchronized synchronized getInstance(){   if(singleton==null){   singleton = new Singleton();   }   return singleton;   }   }  比较:   饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变   懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的  从实现方式来讲他们最大的区别就是懒汉式是延时加载, 他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建, 使用的场合根据具体环境和个人习惯吧.   饿汉式单例类在自己被加载时就将自己实例化。即便加载器是静态的,在饿汉式单例 类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。 从速度和反应时间角度来讲,则比懒汉式单例类稍好些。然而,懒汉式单例类在实例化时, 必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控 制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费时间。这意味着出现 多线程同时首次引用此类的机率变得较大。     饿汉式单例类可以在 Java 语言内实现,但不易在 C++内实现,因为静态初始化在 C++ 里没有固定的顺序,因而静态的 m_instance 变量的初始化与类的加载顺序没有保证,可能 会出问题。饿汉式单例类更符合 Java 语言本身的特点。

阅读(1561) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册