单例模式(饿汉式与懒汉式)

本文介绍了Java中的两种单例模式实现:饿汉式和懒汉式。饿汉式在类加载时即创建单例对象,确保线程安全但可能导致资源浪费;懒汉式则在首次请求时才创建对象,但未做同步处理,存在线程不安全问题。理解这两种模式对于优化程序性能和避免并发问题至关重要。
摘要由CSDN通过智能技术生成
饿汉式单例模式

创建过程:(饿汉式:虽然可能没使用这个实例,但已经创建了)

  1. 将构造器私有化1

  2. 在类的内部创建私有的静态的对象

  3. 提供一个公共的静态方法,返回单例对象

    package com.lzh.springcloud.day6;
    
    public class Single {
        public static void main(String[] args) {
            Girlfriend girlfriend=Girlfriend.getGirlfriend();
        }
    }
    
    class Girlfriend{
    
        private String name;
        //将构造器私有化,不能创建对象
        private Girlfriend(String name){
            this.name=name;
        }
        private static Girlfriend girlfriend=new Girlfriend("李婉娜");
        public static Girlfriend getGirlfriend(){
            return girlfriend;
        }
    
    }
    
    单例模式懒汉式(线程不安全 )

    创建过程:

  4. 仍然将构造器私有化

  5. 定义一个静态属性对象,但不new

  6. 提供一个static public方法,返回一个对象

  7. 只有但对象要求返回对象时,才new对象,当第二次访问对象时,会返回上次生成的对象

package com.lzh.springcloud.day6;

public class single2 {
    public static void main(String[] args) {
        Cat cat=Cat.getInstance();
    }
}
class Cat {
    private String name;
    private Cat(String name){
        this.name = name;
    }
    private static Cat cat;
    public static Cat getInstance(){
        if (cat == null) {
            cat=new Cat("小猫");
        }
        return cat;
    }
}
为什么线程不安全

当有多个线程同时进入下面代码区时
在这里插入图片描述

某几个线程同时判定,cat==null 成立,此时,多个线程同时创建了实例对象,此时不再符合单例,故而线程不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值