JAVA设计模式之单例设计模式

来源:互联网 发布:游戏推荐 知乎 编辑:程序博客网 时间:2024/06/06 02:58

概念:

JAVA单例设计模式分为懒汉式、饿汉式和登记式单例三种,以下只介绍前两种。

一、懒汉式单例:

<pre name="code" class="html">//懒汉式在第一次调用的时候实例化自己public class Singleton{ //私有的构造函数,防止在外部被实例化 private Singleton() {} private static Singleton single = null; public static Singleton getInstance() {    if(single==null){       single = new Singleton();    }     return single; }}

以上懒汉式单例设计没有考虑到线程安全的问题,并发环境下很有可能出现多个Singleton实例;解决线程安全问题,需要添加同步代码块,但会降低效率

<pre name="code" class="html">//懒汉式在第一次调用的时候实例化自己public class Singleton{ //私有的构造函数,防止在外部被实例化 private Singleton() {} private static Singleton single = null; public static Singleton getInstance() {    if(single==null){
       //同步代码块       synchronized(Singleton.class){          if(single==null){              single = new Singleton();          }       }    }     return single; }}

二、饿汉式:

//饿汉式在类初始化的时候,已经自行实例化public class Singleton{   private Singleton(){}   //实例化   private static final Singleton single = new Singleton();   public static Singleton getInstance(){        return single;   }}
饿汉式在类创建的同时就已经创建好一个静态对象供系统使用,以后不再改变,所以是线程安全的。

个人总结如下:

1、懒汉式一开始并没有创建实例,而是在用到的时候才会创建一个实例;饿汉式是类创建的同时就创建一个实例;

2、懒汉式是非线程安全的,如果要解决线程安全问题需要添加同步代码块,会降低效率;饿汉式是线程安全的;






0 0