单例模式(Singleton) : 是一种常用的软件设计模式。 在它的核心结构中只包含一个被称为单例的特殊类。
通过单例模式可以保证系统中, 应用该模式的类一个类只有一个实例, 即一个类只有一个对象实例。
目的是为了节省重复创建对象所带来的内存消耗, 从而来提高效率 。
实现核心点:
1.构造方法私有化;
2.声明一个本类对象(静态);
3.给外部提供一个静态方法获取对象实例。
饿汉式实现: 在类被加载后, 对象被创建, 到程序结束后释放 。 | 懒汉式实现: 在第一次调用getInstance方法时, 对象被创建,到程序结束后释放。 |
//饿汉式: 占用内存的时间长, 提高效率 class Singleton1{ private Singleton1(){} private static Singleton1 s = new Singleton1(); public static Singleton1 getInstance(){ return s; } public void print(){ System.out.println("测试方法"); } } | //懒汉式: 占用内存的时间短, 效率低(懒加载,延迟加载) class Singleton2{ private Singleton2(){}; private static Singleton2 s; public static Singleton2 getInstance(){ if(s==null){ s = new Singleton2(); } return s; } public void print(){ System.out.println("测试方法2"); } } |
单例模式在实际开发中的应用:
1.在设计一些工具类的时候(通常工具类, 只有功能方法, 没有属性) ;
2.工具类可能会被频繁调用 。
单例懒汉式的线程安全问题:可以通过synchronized 关键字来解决多线程的线程安全问题。
public class Singleton { // 将自身实例化对象设置为一个属性, 并用static修饰 // 静态方法返回该实例, 加synchronized关键字实现同步 return s; |
但在多线程情形下, synchronized方法通常效率低, 显然这不是最佳的实现方案。
DCL双检查锁机制(DCL: double checked locking) :单例模式的最佳实现方式。 内存占用率高, 效率高, 线程安全, 多线程操作原子性。
public class Singleton { // 构造方法私有化 // 将自身实例化对象设置为一个属性, 并用static修饰 // 静态方法返回该实例 // 第一次检查instance是否被实例化出来, 如果没有进入if块 return s; } |
原文转载:http://www.shaoqun.com/a/477672.html
周宁:https://www.ikjzd.com/w/1647
pocket:https://www.ikjzd.com/w/1903
yiqu:https://www.ikjzd.com/w/210
单例模式(Singleton):是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。 通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例。 目的是为了节省重复创建对象所带来的内存消耗,从而来提高效率。实现核心点:1.构造方法私有化;2.声明一个本类对象(静态);3.给外部提供一个静态方法获取对象实例。 饿汉式实现:在类被加
cares:https://www.ikjzd.com/w/1302
洋老板:https://www.ikjzd.com/w/2779
电子产品销量骤降,娱乐游戏机市场释放积极信号,跨境卖家需要注意什么?:https://www.ikjzd.com/home/126075
冬季装备只能囤仓库?亚马逊澳洲站6月这些是畅销选品!:https://www.ikjzd.com/home/21147
亚马逊删评风暴之后,美、俄、印三国再掀物流风暴!:https://www.ikjzd.com/home/1418