作者:HW-WT
摘要:1. 为什么要用单例模式? 单例模式保证了系统该内存中该类只有一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能 2. 单例模式的几种形式 1)饿汉式(一):静态变量 优点:写法简单,在类装载的时候就完成实例化,避免了线程同步问题 缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果,如果从始至终都没使用这个实例,会造成内存浪费 JAVA的源码Runtime使用的就是这种方式 pu
1. 为什么要用单例模式?
单例模式保证了系统该内存中该类只有一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能
2. 单例模式的几种形式
1)饿汉式(一):静态变量
优点:写法简单,在类装载的时候就完成实例化,避免了线程同步问题
缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果,如果从始至终都没使用这个实例,会造成内存浪费
JAVA的源码Runtime使用的就是这种方式
2)饿汉式(二):静态代码块
和静态变量实现基本一样,优缺点一致
3)懒汉式(一):
优点:起到了Lazy Loading,即使用到才会加载类对象,但是只能在单线程下使用
缺点:线程不安全(可能会new出多个实例)
4)懒汉式(二):解决线程同步问题(同步锁)
优点:解决了线程安全问题
缺点:每次都同步,效率低,实际开发中不推荐使用
5)双重检查:
可以解决线程安全和低效问题,推荐使用
6)静态内部类:
i. 采用类装载的机制来保证初始化实例只有一个线程,静态内部类在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装在SingletonInstance类,从而完成Singleton的实例化
ii. 类的静态属性只会在第一次加载类的时候初始化,所以在这里JVM帮助我们保证了线程的安全性,在类加载的时候,别的线程是无法进入的
iii. 优点:避免了线程不安全,进行静态内部类特点实现延迟加载,效率高,推荐使用
7)枚举:
可以解决线程安全和低效问题,Java作者推荐使用





































苏公安网备 32011402010933号