常见的单例模式
- Java中的设计模式是 Java开发人员进阶需要掌握的知识点,这篇文章针对创建型模式中较简单之一的单例模式做下整理。
- 见如下代码:
/**
* @description: 线程不安全
*/
public class Singleton01 {
private static Singleton01 instance;
private Singleton01() {
}
public static Singleton01 getInstance() {
if (instance == null) {
instance = new Singleton01();
}
return instance;
}
}
/**
* @description: lazy DCL 若需保证并发, 使用此种方式。
*/
class Singleton02 {
// 私有实例化属性, 内存可见性。
private volatile static Singleton02 instance;
// 构造器私有
public Singleton02() {
}
// 对外提供方法
public static Singleton02 getInstance() {
if (instance == null) {
// 加类锁, 保证线程并发
synchronized (Singleton02.class) {
if (instance == null) {
instance = new Singleton02();
}
}
}
return instance;
}
}
/**
* @description: lazy 静态内部类 线程安全 若需延迟加载, 使用此种方式。
*/
class Singleton03 {
// 内部类初始化实例
private static class SingletonHolder {
private static final Singleton03 instance = new Singleton03();
}
// 构造器私有
public Singleton03() {
}
// 对外提供方法
public static final Singleton03 getInstance() {
return SingletonHolder.instance;
}
}
/**
*@description: hungry 线程安全(类加载时保证一个线程初始化), 一般使用此种方式。
*/
class Singleton04 {
// 类加载时指定对象
private static Singleton04 instance = new Singleton04();
// 构造函数私有化
private Singleton04() {
}
// 对外提供方法
public static Singleton04 getInstance() {
return instance;
}
}
- 若有不对之处,望指正,共同学习,共同进步。