单例模式几种实现
来源:互联网 发布:人工智能研究热点 编辑:程序博客网 时间:2024/05/17 22:07
- 饿汉模式
public class JDBCSingleton1 { /** * 构造函数私有,避免类在外部被实例化 */ private JDBCSingleton1(){ } private static final JDBCSingleton1 jdbcSingleton = new JDBCSingleton1(); // 饿汉模式,线程安全 public static JDBCSingleton1 getJDBCSinleton(){ return jdbcSingleton; }}
- 懒汉模式1–线程不安全
public class JDBCSingleton2 { /** * 构造函数私有,避免类在外部被实例化 */ private JDBCSingleton2(){ } private static JDBCSingleton2 jdbcSingleton = null; // 懒汉模式1,线程不安全 public static JDBCSingleton2 getJDBCSinleton(){ if(jdbcSingleton == null){ jdbcSingleton = new JDBCSingleton2(); } return jdbcSingleton; }}
- 懒汉模式2–加synchronized控制,线程安全,效率低
public class JDBCSingleton3 { /** * 构造函数私有,避免类在外部被实例化 */ private JDBCSingleton3(){ } private static JDBCSingleton3 jdbcSingleton = null; // 懒汉模式2,在方法上加syncronized,线程安全 public synchronized static JDBCSingleton3 getJDBCSinleton(){ // 每次都要同步,效率低 if(jdbcSingleton == null){ jdbcSingleton = new JDBCSingleton3(); } return jdbcSingleton; }}
- 懒汉模式3–双重检查锁定,线程安全,效率较高
public class JDBCSingleton4 { /** * 构造函数私有,避免类在外部被实例化 */ private JDBCSingleton4(){ } private static JDBCSingleton4 jdbcSingleton = null; // 懒汉模式3,双中检查锁定,线程安全 public static JDBCSingleton4 getJDBCSinleton(){ // synchronized关键字不加在方法上,避免每次都要同步,显著提升性能 if(jdbcSingleton == null){ synchronized(JDBCSingleton4.class){ if(jdbcSingleton == null){ jdbcSingleton = new JDBCSingleton4(); } } } return jdbcSingleton; }}
- 懒汉模式4–静态内部类,线程安全,效率最高
public class JDBCSingleton5 { /** * 构造函数私有,避免类在外部被实例化 */ private JDBCSingleton5(){ } static class JDBCSingletonHolder { private static JDBCSingleton5 jdbcSingleton = new JDBCSingleton5(); // 懒汉模式4,静态内部类,线程安全,利用classloader的机制来保证初始化instance时只有一个线程,效率最高,推荐使用 } public static JDBCSingleton5 getJDBCSinleton(){ return JDBCSingletonHolder.jdbcSingleton; }}
结论&注意
1、推荐使用静态内部类创建单例
2、单例失效:通过Java反射机制是能够实例化构造方法为private的类的,使得Java单例实现失效
阅读全文
0 0
- 单例模式几种实现方法
- 单例模式的几种实现
- 单例模式几种实现方式
- 单例模式的几种实现
- 单例模式的几种实现
- 单例模式的几种实现
- 单例模式几种实现方法
- 单例模式几种实现
- 单例模式几种实现
- 单例模式的几种实现
- IOS实现单例模式的几种实现方法
- IOS实现单例模式的几种实现方法
- java单例模式的几种实现
- JAVA单例模式的几种实现方法
- 单例模式singleton的几种实现方式
- JAVA单例模式的几种实现方法
- JAVA单例模式的几种实现方法
- 单例模式的几种实现及其比较
- HTML&CSS基础篇之五:HTML网页创建流程
- 【数据库SQL实战】找出所有员工当前具体的薪水情况
- 2017-7-14
- Linux命令:traceroute命令(路由跟踪)
- 搭建APPRTC服务器时,遇到的coturn服务器配置及调用的问题解决
- 单例模式几种实现
- 仿今日头条视频播放JieCaoVideoPlayer
- 码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解
- IntentService简介
- Hibernate中Session提供的get()与load()方法
- .Net框架的ado.Net实体对象模型初步使用
- android 6.0权限申请
- leetcode-121
- uicollection卡动