java设计模式_单例模式_学习笔记

来源:互联网 发布:淘宝联盟验证失败 编辑:程序博客网 时间:2024/06/05 02:03

1、为什么使用单例设计模式?

为了避免多个实例造成资源浪费,与避免多实例多次调用出现的错误


2、什么是单例设计模式?

单例模式能够保证整个应用中有且只有一个实例


3、怎么使用单例模式?

(1)私有化该类的构造函数
(2)在
类中new一个对象
(3)定义一个公有的方法,返回由该类创建的对象

4、单例模式的写法

4.1 饿汉式[可用]

public class Singleton {    private static Singleton instance=new Singleton();    private Singleton(){}    public static Singleton getInstance(){        return instance;    }}  
访问方式:

Singleton instance = Singleton.getInstance();

4.2 懒汉式[线程不安全,不可用]

public class Singleton {    private Singleton() {};    private static Singleton instance=null;    public static Singleton getInstance(){        if(instance==null){            instance=new Singleton();        }        return instance;    }}
当多个线程执行 if(instance==null) 时而还没执行到 instance=new Singleton() 都会进入, 然后都将执行 instance=new Singleton()导致出现多个实例, 故存在线程不安全问题


4.6 懒汉式双重校验锁[推荐用]

public class Singleton {    private Singleton() {}    private static Singleton instance = null;    public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}
写两次if(instance==null), 第一次避免如果已有实例还要执行同步操作导致的效率问题, 第二次保证了即使多个线程通过if(instance==null)后能在线程锁下保证只执行一次instance=new Singleton()





原创粉丝点击