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

单例模式:在整个java程序运行过程中,某个类自始至终只允许存在一个对象

两种写法:

饿汉式: 在类的加载过程中,该类的对象就已经存在了。

懒汉式:类不调用方法,内存始终没有该类的对象,可能存在线程安全的问题。synchronized

详细见如下代码:

java 复制代码
class ErHan{
    private static ErHan erHan=new ErHan();

   private ErHan() {
    }
    public  static ErHan getErHan(){
        return erHan;
    }


}
class xianCheng extends Thread{
    public xianCheng() {
    }

    @Override
    public void run() {
        //run没有返回值,无法知晓两个对象是否相同,可以打印出来
//        LanHan l = LanHan.getLanHan();
//        System.out.println(l);
        //run没有返回值,无法知晓两个对象是否相同,可以重新定义一个有返回值的方法GET()
        GET();

    }
    public static LanHan GET(){
        LanHan lanHan = LanHan.getLanHan();
        return lanHan;
    }
}
class LanHan {
    private LanHan(){}
    private static  LanHan lanHan;

    //懒汉是不调用方法,就不执行,存在线程安全问题,可以加同步锁 synchronized 保证安全
    public  static LanHan getLanHan(){
        if(lanHan==null){
            lanHan = new LanHan();
        }
        return lanHan;
    }


}

public class Single {
    public static void main(String[] args) {
        ErHan e1 = ErHan.getErHan();
        ErHan e2 = ErHan.getErHan();
        System.out.println("饿汉抢:"+e2.equals(e1));//单例模式,每次只允许一个对象,e2==e1
        //因为构造方法私有,无法new,即使继承Thread或者实现其他接口,也无法new出对象来执行线程
        //所以重新定义一个子类线程,在去抢LanHan的getLanHan方法
        xianCheng x1 = new xianCheng();
        xianCheng x2 = new xianCheng();
        x1.start();
        x2.start();
        System.out.println("懒汉抢:"+x1.GET().equals(x2.GET()));




    }
}
相关推荐
cndes13 分钟前
给Miniconda换源,让包下载更迅速
开发语言·python
乐观的Terry21 分钟前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构
LuminousCPP31 分钟前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水34 分钟前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
铅笔侠_小龙虾1 小时前
Rust 学习(4)-函数与注释
开发语言·学习·rust
名字还没想好☜1 小时前
用 Redis + Redisson 实现分布式锁:从踩坑到生产可用
java·redis·分布式·junit·分布式锁·redisson
tiana_1 小时前
写了个零依赖的 Go 版本管理器,curl | bash 完事
开发语言·golang·bash
谙忆1 小时前
图片CDN与边缘优化实战:缓存策略、图片处理型CDN与动态裁剪
java·spring·缓存
嘘嘘出差1 小时前
Python 爬虫入门实战:爬取豆瓣电影 Top 250
开发语言·爬虫·python
爱写代码的倒霉蛋2 小时前
实现协程的三种方式
开发语言·python