单例

单例就是该类只能返回一个实例。

单例所具备的特点:

     1.私有化的构造函数

     2.私有的静态的全局变量

     3.公有的静态的方法

单例分为懒汉式、饿汉式和双层锁式

饿汉式:

public class Singleton1 {

      private Singleton1() {};

      private static Singleton1 single = newSingleton1();

      public static Singleton1 getInstance() {

          return single;

     }

 }

 

懒汉式:

public class Singleton2 {

      private Singleton2() {}

      private static Singleton2 single=null;

      public tatic Singleton2 getInstance() {

           if (single == null) { 

              single = new Singleton2();

          } 

         return single;

     }

 }

线程安全:

public class Singleton3 {

        private Singleton3() {}

        private static Singleton3 single ;

        public static Singleton3 getInstance() {

              if(null== single){

                     synchronized(single ){

                            if(null== single){

                                   single = new Singleton3();

                            }

                     }

              }

              returnsingle;

         }

}

 

参考:

 

通过双重判断来保证单列设计模式在多线程中的安全性,

并且它在性能方面提高了很多。

时间: 2024-09-20 04:18:46

单例的相关文章

类加载器与单例

当使用不同的类加载器时,也会使单例失效,如下:  单例为:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public final class Singleton{           private static final Singleton instance=new Singleton();           private Singleton(){                 System.out.println("执行构造函数");      

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

PHP单例:只在整个页面周期内唯一

由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. 单例模式的存在在一些情况下是比较有意义的,如BlogEngine的站点配置就是采用的单例模式,而且它的载入和保存的代码是相当经典的,有兴趣可以看看它的源代码. 由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. php的单例模式的实现大致如下: class Stat{       static

设计模式C#描述——单例与多例模式

设计 设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton { private static Singleton m_instance = null; private

Ruby设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你 分析数据,但是Ruby原生带有的puts方法却很少在真正的项目开发中使用. 为什么作为Ruby新 手神器的puts,到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比 如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率:又或者不能将日志记录到本 地文件,一旦打印被清除,日志将再也找不回来:再或者打印的内容没有Tag区分,你将很难辨别这一 行日志是在哪个类里打印的. 你的

C#下的单例实现

最普通的一种: 以下是引用片段: using System; public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if (instance == null) instance = new Singleton(); return instance; } } } 这种方案在.net下面是线程不安全的,每个线

设计模式C#描述-单例与多例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton{private static Singleton m_instance = null; private Singleton(){}public sta

关于Java单例对象同步问题

单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.正是由于这个特点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息.例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可.这种方式极大地简化了在复杂环境下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步

Spring中单例bean访问非单例bean的第一种方式:方法注入

方法注入在Spring中是很少用的,主要应用是, 对象中可能定义了一个受保 护的抽象方法,而容器可能在运行时实现他以返回由容器查询得到的对象. 方法注入的最好用途之一就是处理单态.无状态对象需要调用非单态.有状 态或者非线程安全对象的情况. 以前刚接触Spring时,如果在单例bean中调用非单例bean,只要把那个非单 例bean 的singleton设置为false就可以了.其实不然,大家想,我们创建了一 个单例对象,在此单例对象中所用到的其它bean也只会创建一次--(大多数情 况是这样的

PHP里的单例类写法实例

  这篇文章主要介绍了PHP里的单例类写法实例,本文直接给出代码实例,需要的朋友可以参考下 PHP里的单实例类在进行数据交换,节省内存上还是很有意义的.写个简单例子. 类1,单实例类本身: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class UTIL { private static $instance; public function get() { if (!self::$instance) { self::$instance = new UTIL(