剑指offer系列(1)——单例模式实现

来源:互联网 发布:激战2人类男捏脸数据库 编辑:程序博客网 时间:2024/05/18 01:31

在剑指offer系列,我将用java实现这本书里的面试题,这是剑指offer的第一个面试题,实现单例模式。
java实现单例模式主要有两种方式:饿汉式和懒汉式,下面是两种实现:
懒汉式:

public class Singleton {    private static Singleton single = null;    private Singleton(){        //构造方法设为私有防止其他类调用    }    public static synchronized Singleton getInstance(){        //synchronized 限定了这个方法在同一时刻只能被一个线程调用        //static限定了他是一个静态方法,可以拿类名调用        if (single == null) {            //只有当single之前没有初始化我们在初始化他            single = new Singleton();        }        return single;    }}

书上提到这个代码似乎可以再优化,即在当single(单例对象)为空时再加锁,这样就不用给方法加锁了,可以提高运行速度。代码如下:

public class Singleton {    private static Singleton single = null;    private Singleton(){        //构造方法设为私有防止其他类调用    }    public static Singleton getInstance(){        //synchronized 限定了这个方法在同一时刻只能被一个线程调用        //static限定了他是一个静态方法,可以拿类名调用        if (single == null) {            synchronized(single){                   //给对象加锁                if (single == null) {                    //只有当single之前没有初始化我们在初始化他                    single = new Singleton();                }            }        }        return single;    }}

饿汉式:

public class Singleton {    private static Singleton single = new Singleton();    private Singleton(){        //构造方法设为私有防止其他类调用    }    private static Singleton getInstance(){        //static限定了他是一个静态方法,可以拿类名调用        return single;    }}

饿汉式这个类从一开始就一直维护一个实例,运行快,但占用空间较多。而懒汉式则按需创建(即需要时在创建),但用时较长。

原创粉丝点击