
java单例模式
发布日期:2025-04-02 01:45:01
浏览次数:11
分类:精选文章
本文共 3299 字,大约阅读时间需要 10 分钟。
单例模式实践探索
1. 第一个理解:什么是单例模式
单例模式是一个设计模式,确保一个类在程序中只能有一个实例。其他所有请求都将返回这个唯一实例。这样可以提高性能和防止内存泄漏。
2. 实现懒汉式单例
懒汉式的特点是只有当需要时才创建实例。这种方式在第一次需要实例时进行初始化,这样可以减少资源浪费。
public class SingletonStudent { private static SingletonStudent student = null; private String name; private int age; private SingletonStudent() { // 私有化构造 } public static synchronized SingletonStudent getInstance() { if (student == null) { // 双重锁确保线程安全 synchronized (SingletonStudent.class) { if (student == null) { student = new SingletonStudent(); } } } return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
3. 饿汉式单例的实现
饿汉式会在定义类的时候创建实例,保证无论何时都有一份实例,减少了大量需求时的崩溃可能性。
public class SingletonStudent2 { private static SingletonStudent2 student = new SingletonStudent2(); private String name; private int age; private SingletonStudent2() { // 私有化构造 } public static synchronized SingletonStudent2 getInstance() { return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
4. 双重锁单例实现
双重锁确保在高并发环境下也能线程安全地管理单例实例,保证多次访问只会创建一个实例。
public class SingletonStudent3 { private static SingletonStudent3 student = null; private String name; private int age; private SingletonStudent3() { // 私有化构造 } public static synchronized SingletonStudent3 getInstance() { if (student == null) { synchronized (SingletonStudent3.class) { if (student == null) { student = new SingletonStudent3(); } } } return student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
5. 测试验证
通过在测试类中创建单例对象,设置不同的年龄和姓名,然后验证实例是否一致。
@Testpublic void testSingleton() { SingletonStudent student1 = SingletonStudent.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent student2 = SingletonStudent.getInstance(); //(student1 == student2) 应为 true System.out.println(student1 == student2);}
@Testpublic void testSingleton2() { SingletonStudent2 student1 = SingletonStudent2.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent2 student2 = SingletonStudent2.getInstance(); //student1 == student2 应为 true System.out.println(student1 == student2);}
@Testpublic void testSingleton3() { SingletonStudent3 student1 = SingletonStudent3.getInstance(); student1.setAge(50); student1.setName("小黑"); SingletonStudent3 student2 = SingletonStudent3.getInstance(); //student1 == student2 应为 true System.out.println(student1 == student2);}
6. 总结
通过本次实践,我深入理解了单例模式的实现方式,包括懒汉式、饿汉式以及双重锁机制。未来的学习中,我将继续探索如何优化这些实现,确保在性能和线程安全之间取得平衡。此外,我也计划实践更多的设计模式,以提升面对实际项目问题的应对能力。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月01日 05时36分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
程序员都看不懂的代码
2025-03-28
LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践
2025-03-28
404页面自动跳转源码
2025-03-28
46:把数字翻译成字符串(动态规划)
2025-03-28
500套精美Logo样机模板可直接套用、轻松制作炫酷logo
2025-03-28
ASP.NET MVC4 json序列化器
2025-03-28
@ResponseBody 和 @RequestBody
2025-03-28
A + B 九度oj
2025-03-28
A20地址线
2025-03-28
abaqus质量缩放系数取值_ABAQUS的质量缩放
2025-03-28
Accessibility
2025-03-28
CentOS 系列:CentOS 7文件系统的组成
2025-03-28
Docker部署postgresql-11以及主从配置
2025-03-28
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2025-03-28
kali安装docker(亲测有效)
2025-03-28