1. 单例模式第一式:饿汉式
特点:
- 预加载技术。也就是说系统启动后,单例对象就已经创建完毕
- EagerSingleton的构造函数,是private修饰的。(防止使用new关键字来创建一个新的实例)
- 线程安全
/**
* 饿汉式单例,非懒加载
*
* 以空间换时间
*
* 线程安全
*/
public class EagerSingleton {
// 注意:类被加载的时候初始化实例
private static EagerSingleton instance = new EagerSingleton();
// 注意:private类型的构造函数,保证其他对象不能直接new一个该对象的实例
private EagerSingleton() {
}
public static EagerSingleton getInstance() {
return instance;
}
}
2. 单例模式第二式:懒汉式
特点:
- 懒汉式单例在类加载时不进行实例化,而是使用者第一次调用getInstance方法时进行实例化。
- 延迟加载技术可以提高系统启动速度,是系统开发中一种常见的资源利用效率提高方法。
- 为了防止多个线程同时调用getInstance方法,需要在该方法前面增加关键字synchronized进行线程访问锁定。(在高并发场景下,对系统性能有较大负面影响)
/**
* 懒汉式单例,实现懒加载
*
* 线程安全
*/
public class LazySingleton {
private static LazySingleton instance = null;
//注意:private类型的构造函数,保证其它类对象不能直接new一个该对象的实例。
private LazySingleton() {
}
/**
* 注意 synchronized
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}