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. 总结

通过本次实践,我深入理解了单例模式的实现方式,包括懒汉式、饿汉式以及双重锁机制。未来的学习中,我将继续探索如何优化这些实现,确保在性能和线程安全之间取得平衡。此外,我也计划实践更多的设计模式,以提升面对实际项目问题的应对能力。

上一篇:Java单元测试Mock框架Mockito入门介绍!
下一篇:java单体服务的内部模块分层,前后端技术框架选型,设计模式,优缺点

发表评论

最新留言

不错!
[***.144.177.141]2025年05月01日 05时36分15秒