科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何使用Java Singleton模式

如何使用Java Singleton模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java Singleton模式属于管理实例化过程的设计模式家族。Singleton是一个无法实例化的对象。这种设计模式暗示,在任何时候,只能由JVM创建一个Singleton(对象)实例。

作者:开发者在线 来源:开发者在线 2007年8月8日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

多线程应用程序中的构造问题

在多线程应用程序中,你必须仔细构造Singleton模式。当Singleton不存在时,如果两个线程即将同时执行创建方法,这两个线程必须检查Singleton实例,但只有一个线程应当创建新对象。这个问题的典型解决办法就是对类使用相互排斥,指出对象正在被实例化。这是Singleton的一个线程安全的版本:

public class Singleton

 {

   // Private constructor suppresses generation

   //  of a (public) default constructor

   private Singleton() {} 

   private static class SingletonHolder

   {

     private final static Singleton INSTANCE = new Singleton();

   } 

   public static Singleton getInstance()

   {

     return SingletonHolder.INSTANCE;

   }

 }

 

另一个解决办法是在getInstance()方法声明中添加synchronized关键字:

  public static synchronized Singleton getInstance()

提前考虑克隆预防

你仍然可以使用对象的clone()方法克隆对象,建立一个Singleton对象。要禁用这一功能,你需要禁用对象的克隆方法,这产生一个CloneNotSupportedException例外。

      public Object clone() throws

CloneNotSupportedException {

         throw new CloneNotSupportedException();

}

考虑使singleton类位于最后

你可能希望将Singleton类放在最后,以避免Singleton的子类造成其它问题。

不要忘记垃圾收集

根据不同的执行,你的Singleton类和它的所有数据可能被当作垃圾收集。因此,在应用程序运行时,你必须保证存在一个Singleton类的实时引用。

结论

Singleton模块得到广泛地使用,并证实可用于软件设计。虽然这个模式并非Java专有,但它已成为Java编程的一个典型应用。尽管这个模式相当简单,但还是要记住我在本文中描述的Singleton模式的限制。

Peter V. Mikhalenko是一名通过Sun认证的专家,现在任德意志银行商业顾问。

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章