单例模式源代码
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处包括资源管理(如数据库连接)、性能优化(如缓存服务)以及简化对共享对象的并发控制。 在Java中实现单例模式主要有三种方式: 1. 饿汉式(静态常量): 这种实现方式是在类加载时就创建了单例对象,线程安全,且避免了同步开销。 ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 2. 饿汉式(静态代码块): 与静态常量方式类似,只是将实例化操作放在静态代码块中,同样保证了线程安全。 ```java public class Singleton { private static Singleton INSTANCE; static { INSTANCE = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 3. 懒汉式(线程不安全): 在第一次调用getInstance()方法时才实例化对象,但这种方式在多线程环境下可能创建多个实例。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 4. 懒汉式(线程安全,同步方法): 通过synchronized关键字保证线程安全,但同步操作会降低效率。 ```java public class Singleton { private static Singleton instance; private Singleton() {} public synchronized static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 5. 双重检查锁定(DCL,线程安全): 结合了懒汉式的延迟初始化和饿汉式的线程安全性,提高了效率。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 6. 静态内部类: 利用Java类加载机制保证初始化实例时只有一个线程,同时避免了同步带来的性能问题。 ```java public class Singleton { private Singleton() {} private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } ``` 7. 枚举单例: 这是Joshua Bloch在《Effective Java》中推荐的方式,既简单又线程安全,无需担心序列化问题。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 以上就是Java中实现单例模式的各种方法及其特点,每种方式都有其适用场景,开发者应根据实际需求选择合适的实现方式。了解并掌握这些单例模式的实现方式,对于后续学习其他设计模式以及提高代码质量都是非常有帮助的。
- 1
- mdb78945612302013-12-26这个单例模式源代码我下载过,并且用在了我的实验中,在作业中确实需要这样的一类做参考,才能编写代码的时候游刃有余。
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 冯尔康320240941121.zip
- 基于Java和CSS的bookStore项目源码学习Git和SSH框架实践
- 基于Qt6.2.4的数据库应用课程设计-景点门票管理系统的设计与实现.zip
- 基于Java后端与Vue前端技术的在线商城设计源码
- 基于Qt创建的Linux系统下的浏览器.zip
- UBNT-ER-x 固件刷机.zip学习资源
- Prophet时间序列预测入门.ipynb
- 一款由Java写的射击游戏.zip算法资源
- 一些java的小游戏项目,贪吃蛇啥的.zip用户手册
- 在线实时的斗兽棋游戏,时间赶,粗暴的使用jQuery + websoket 实现实时H5对战游戏 + java.zip课程设计