什么是单例模式:
- 程序中只能有一个实例对象
- 单例类自己创建该对象
- 单例类向外提供该对象
饿汉式
写法:
- 私有化静态变量
- 私有化构造器
- 提供唯一获取方法
getInstance()
/**
* 饿汉式单例
*/
public class Singleton2 {
//私有化静态变量,程序初始化时就创建实例
private static Singleton2 singleton2 = new Singleton2();
//私有化构造器
private Singleton2() {
}
//提供外部获取实例的唯一方法
public static Singleton2 getInstance(){
return singleton2;
}
}
饿汉式特点:
- 不管需不需要,程序初始化时就创建该单例对象
- 天生线程安全
懒汉式
写法:
- 私有化静态变量
- 私有化构造器
- 在唯一获取方法中,实例化对象
/**
* 懒汉式单例
*/
public class Singleton {
//私有化静态变量
private static Singleton singleton = null;
//私有化构造器(外部无法通过构造器实例对象)
private Singleton() {
}
//提供唯一获取方法,什么时候需要什么时候实例化
public static Singleton getInstance(){
if (singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
懒汉式特点:
- 在
getInstance()
中new
对象 - 什么时候需要实例对象,什么时候调用
getInstance()
- 非线程安全
懒汉式(线程安全)
加锁并进行双重检查