zoukankan      html  css  js  c++  java
  • 单例设计模式

     1 public class Singleton {
     2     static Singleton s3;
     3     static Singleton s4;
     4     public static void main(String[] args)
     5     {
     6         Singleton s1=Singleton.GetInstance();
     7         Singleton s2=Singleton.GetInstance();
     8         Thread t1=new Thread()
     9         {
    10             public void run()
    11             {
    12                 s3=Singleton.Instance();
    13             }
    14         };
    15         Thread t2=new Thread()
    16         {
    17             public void run()
    18             {
    19                 s4=Singleton.Instance();
    20             }
    21         };
    22         t1.start();
    23         t2.start();
    24         try
    25         {
    26             t1.join();
    27             t2.join();
    28         }
    29         catch(InterruptedException e)
    30         {
    31             e.printStackTrace();
    32         }
    33         if(s1==s2)
    34             System.out.println("同一个实例");
    35         if(s3==s4)
    36             System.out.println("同一个实例");
    37     }
    38 
    39 }
    40 class Singleton
    41 {
    42     private volatile static Singleton singleton;
    43     private Singleton()
    44     {
    45         
    46     }
    47     public static Singleton GetInstance()
    48     {
    49         return InnerSingleton.singleton;
    50     }
    51     //内部静态类,在创建外部类时并不会马上创建静态内部类,用到了才会创建
    52     private static class InnerSingleton
    53     {
    54         private static final Singleton singleton=new Singleton();
    55     }
    56     //线程安全的
    57     public static Singleton Instance()
    58     {
    59         if(singleton==null)
    60         {
    61             synchronized(Singleton.class)
    62             {
    63                 if(singleton==null)
    64                     singleton=new Singleton();
    65             }
    66         }
    67         return singleton;
    68     }
    69 }

    应用场景:

    1. Windows的Task Manager(任务管理器)就是很典型的单例模式,不能打开两个windows task manager

    2. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

    3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

    4. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

    5. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。

    6. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

    7. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。

    8. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

    9. HttpApplication 也是单位例的典型应用。熟悉ASP.NET(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.

  • 相关阅读:
    Intel汇编语言程序设计学习-第三章 汇编语言基础-中
    Intel汇编语言程序设计学习-第三章 汇编语言基础-上
    对支付链接的加密处理 面向接口编程
    编制预算的四个好方法
    Twitter欲以10亿美元收购Flipboard 双方未置评
    分手决策——合伙人离婚时怎样保护你的公司
    领导力须突破命令控制式管理
    腾讯首席探索官建言创业者:尽可能留住早期员工
    人力资本管理的坏习惯
    我们在培训领导者这件事上行动迟缓
  • 原文地址:https://www.cnblogs.com/mingyao123/p/7478677.html
Copyright © 2011-2022 走看看