单例模式
来源:互联网 发布:linux 创建目录权限 编辑:程序博客网 时间:2024/05/01 11:32
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式有饿汉式和懒汉式两种实现方法。
饿汉式:顾名思义饿了比较着急,在类装载时就创建对象实例,所以要提前占用系统资源,长时间占用空间,获取对象实例较快,属于以空间换时间。
懒汉式:顾名思义比较懒需要时才创建,单例访问方法第一次被调用时才实例化对象,获取对象时需要判断对象是否已存在,相对需要更多的时间,属于以时间换空间。懒汉式会面临多线程访问的安全性问题,需要做双重锁定处理才可以保证安全。
饿汉式的单例模式:
懒汉式的单例模式:
总结:饿汉式是在jvm启动加载单例类时就实例化对象,只实例化一次,以后用到的时候就不需要再去实例化了,加载类的时候速度比较慢,但以后获得对象时的速度比较快,该对象从加载到应用结束一直占用资源。
懒汉式相当于一个延迟加载机制,即你需要这个对象时候才去实例化,加载类的时候速度比较快,但以后获得对象时的速度比较慢,该对象在整个应用的生命周期只有一部分时间占用资源。
所以,到底使用哪一种方式,要看实际的需求。
============================================================================
附:java中一种更高效的实现方式(既实现了延迟加载又实现了线程安全):
package com.gyb;public class Singleton {/* * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例没有绑定关系,而且只有 * 被用到时才会被装载,这样就相当于实现了延迟加载。 */private static class SingletonLoader {//静态初始化器,由jvm保证线程安全private static Singleton instance = new Singleton();}private Singleton(){}public static Singleton getInstance(){return SingletonLoader.instance;}}
当getInstance()第一次被调用时,第一次读取SingletonLoader.instance,导致SingletonLoader被装载并初始化,静态域初始化从而创建实例。由于是静态域,因此只会在虚拟机装载类时初始化一次,并由虚拟机来保证线程安全性。
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 等安陆发达了之后
- Android 1.5和Android 2.1在相对布局(RelativeLayout)上的区别
- 关于oracle中blob字段的录入问题
- Cassandra数据模型
- 【IT 系列之12】开明关系正式开业(1)
- 单例模式
- Spring 的优秀工具类盘点,第 1 部分: 文件资源操作和 Web 相关工具类
- 理解SQL SERVER中所有者和架构的区别
- Linux静态/动态链接库的创建和使用
- IM客户端一览。
- CxxTest使用简介 ——VS2008中使用C++单元测试框架
- 查询仅仅选修了指定的两门课程的学生学号
- Java Swing仿QQ登录界面 学习之用
- POJ 1503 Integer Inquiry(高精度运算)