java单例模式讲解

本文深入探讨了Java中的单例模式,包括饿汉式和懒汉式的实现方式。饿汉式在类加载时即完成实例化,确保多线程安全,而懒汉式则在首次获取实例时才构造对象,可能存在线程不安全问题,但可以通过同步解决。单例模式常用于控制序列号生成器、计数器以及减少资源消耗的场景。
摘要由CSDN通过智能技术生成

一.单例模式

        确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,

核心要素就是将构造方法私有化

主要应用就是确保一个类只有一个实例存在,如序列号生成器和web页面计数器等,

还有就是某个对象需要消耗较多资源,如访问IO或数据库资源时使用单例模式减少资源消耗

单例模式又分为饿汉式和懒汉式

二.饿汉式

        在类加载时就进行实例化

由于该类的实例在创建类时就已构造好了,故所有方法获取的对象都是同一个

/**
 * 饿汉式
 */
class Singleton1{
    private static Singleton1 singleton = new Singleton1();//实例化

    private Singleton1(){}

    public static Singleton1 getInstance(){
        return singleton;
    }
}

三.懒汉式 

        在第一次获取该实例的时候才构造该对象

但是如果第一次调用过后就不再创建新对象了,故获取的对象也是同一个.

        但懒汉式线程不安全,举个例子,如果a,b线程同时执行方法会构造两个实例,所以得加锁,关于线程安全问题可以看我这篇文章多线程的安全问题一:同步方法与同步代码块

/**
 * 懒汉式
 */
class Singleton2{
    private static Singleton2 singleton = null;

    private Singleton2(){}

    public synchronized static Singleton2 getInstance(){
        if(singleton == null)
            singleton = new Singleton2();
        return singleton;
    }
}

四.测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值