1.单例模式-创建型
2022-04-17 15:34:53 11 举报
AI智能生成
Java单例模式
作者其他创作
大纲/内容
单例模式
概述
1) 单例模式保证了 系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能<br>2) 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new<br>3) 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)
举例
饿汉式
1.1 静态常量<br>
class Singleton {<br> //1、构造器私有化,外部不能new<br> private Singleton() {<br><br> }<br><br> //2、本类内部创建对象实例<br> private final static Singleton instance = new Singleton();<br><br> //3、提供一个公有的静态方法,返回实例对象<br> public static Singleton getInstance() {<br> return instance;<br> }<br>}
1.2 静态代码块
class Singleton {<br> //1、构造器私有化,外部不能new<br> private Singleton() {<br><br> }<br><br> //2、静态代码块<br> private static Singleton instance;<br><br> static {<br> instance = new Singleton();<br> }<br><br> //3、提供一个公有的静态方法,返回实例对象<br> public static Singleton getInstance() {<br> return instance;<br> }<br>}
懒汉式
2.1 直接(线程不安全)
2.2 同步方法(线程安全)<br>
2.3 synchroniezd同步代码块(线程安全)<br>
2.4 双重校验: synchroniezd同步代码块(volatile + 双重判断)
class Singleton {<br> private static volatile Singleton instance;<br><br> private Singleton() {<br> }<br><br> //提供一个静态的公有方法,加入双重检查代码,解决线程安全问题,同时解决懒加载问题<br> public static Singleton getInstance() {<br> if (instance == null) {<br> synchronized (Singleton.class) {<br> if (instance == null) {<br> instance = new Singleton();<br> }<br> }<br> }<br> return instance;<br> }<br>}
枚举
enum EnumSingleton{<br> INSTANCE;<br> public EnumSingleton getInstance(){<br> return INSTANCE;<br> }<br>}
静态内部类
class SingletonDemo{<br><br> private SingletonDemo(){}<br><br> private static class SingletonInstance{<br> private static final SingletonDemo INSTANCE = new SingletonDemo(); // JVM 装载该内部类, 避免了指令重排<br> }<br><br> public static SingletonDemo getInstance(){<br> return SingletonInstance.INSTANCE;<br> }<br>}<br>
0 条评论
下一页