Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。
单例模式有很多种写法,大部分写法都或多或少有一些不足。下面将分别对这几种写法进行介绍。

<>1、饿汉模式
public class SingletonDemo1 { //类初始化时,立即加载这个对象(没有延时加载的优势)。加载类时,天然的是线程安全的!
private static SingletonDemo1 instance = new SingletonDemo1(); private
SingletonDemo1(){ } //方法没有同步,调用效率高! public static SingletonDemo1 getInstance(){
return instance; } }
<>2、懒汉模式
public class SingletonDemo2 { //类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)。 private static
SingletonDemo2 instance; private SingletonDemo2(){ //私有化构造器 } //方法同步,调用效率低!
public static synchronized SingletonDemo2 getInstance(){ if(instance==null){
instance= new SingletonDemo2(); } return instance; } }
<>3、双重校验锁
public class SingletonDemo3 { private static SingletonDemo3 instance = null;
public static SingletonDemo3 getInstance() { if (instance == null) {
SingletonDemo3 sc; synchronized (SingletonDemo3.class) { sc = instance; if (sc
== null) { synchronized (SingletonDemo3.class) { if(sc == null) { sc = new
SingletonDemo3(); } } instance = sc; } } } return instance; } private
SingletonDemo3() { } } //volatile关键字 public class Singleton { private static
volatile Singleton instance = null; private Singleton(){} public static
SingletongetInstance() { if (instance == null) { synchronized (Singleton.class)
{ if (instance == null) { instance = new Singleton(); } } } return instance; }
<>4、静态内部类
public class SingletonDemo4 { private static class SingletonClassInstance {
private static final SingletonDemo4 instance = new SingletonDemo4(); } private
SingletonDemo4(){ } //方法没有同步,调用效率高! public static SingletonDemo4 getInstance(){
return SingletonClassInstance.instance; } }
<>5、枚举
public enum SingletonDemo5 { //这个枚举元素,本身就是单例对象! INSTANCE; //添加自己需要的操作! public
void singletonOperation(){ } }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信