java性能优化读书笔记之二《设计优化===单例模式》

1. 目的

减少对象实例化次数,从而省略创建对象所花费的时间以及内存空间。

2. 什么是单例

用于产生一个对象的具体实例,它可以确保系统中一个类只生成一个实,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

3. 解决什么问题

一个全局使用的类频繁地创建与销毁

4. 如何解决

判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

5. 何时使用

当您想控制实例数目,节省系统资源的时候。

6. 好处有两点

第一点:对于频繁使用的对象可以省略创建对象所花费的时间,对于那些重要级的对象而言,是非常可观的一笔系统开销

第二点:由于new操作的次数减少,因而对系统内存的使用频率也会降低,这减轻了GC压力,缩短GC停顿时间

7. 角色分配

TablesAre
单例类提高单例的工厂
使用者获取并使用单例类

8. 代码清单

package com.one.design;

public class Singleton {

    private static Singleton singleton;

    /**
     * 构造方法私有,权限只允许本类实例化
     */
    private Singleton(){}


    /**
     * 懒汉式 线程不安全
     * 1、支持懒加载
     * 2、线程不安全
     * 3、容易实现
     * 
     * @return
     */
    public static Singleton getInstance() {

        if(singleton == null) {
            return singleton = new Singleton();
        }

        return singleton;
    }


}

class Singleton2 {

    private static Singleton2 singleton2;

    /**
     * 构造方法私有,权限只允许本类实例化
     */
    private Singleton2(){}

    /**
     * 懒汉式 线程安全
     * 1、支持懒加载
     * 2、线程安全
     * 3、容易实现,使用线程同步,性能受到影响
     * 
     * @return
     */
    public static synchronized Singleton2 getInstance() {

        if(singleton2 == null) {
            return singleton2 = new Singleton2();
        }

        return singleton2;
    }
}



class Singleton3 {

    private static final Singleton3 singleton3 = new Singleton3() ;

    /**
     * 构造方法私有,权限只允许本类实例化
     */
    private Singleton3(){}

    /**
     * 饿汉式
     * 1、不支持懒加载
     * 2、线程安全
     * 3、容易实现
     * @return
     */
    public static  Singleton3 getInstance() {

        return Singleton3.singleton3;
    }
}


class Singleton4 {

    private static  Singleton4 singleton4;

    /**
     * 构造方法私有,权限只允许本类实例化
     */
    private Singleton4(){}

    /**
     * 双重锁定
     * 1、支持懒加载
     * 2、线程安全
     * 3、复杂
     * @return
     */
    public static  Singleton4 getInstance() {
        if(singleton4 == null) {
            synchronized (Singleton4.class) {
                if(singleton4 == null ) {
                    singleton4 = new Singleton4();
                }
            }
        }
        return singleton4;
    }
}


class Singleton5 {

    /**
     * 构造方法私有,权限只允许本类实例化
     */
    private Singleton5(){}

    private static class SingletonHolder{
        private static Singleton5 singleton5 = new Singleton5();
    }

    /**
     * 内部类
     * 1、支持懒加载
     * 2、线程安全
     * 3、一般 
     * @return
     */
    public static  Singleton5 getInstance() {

        return SingletonHolder.singleton5;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值