23种设计模式(3)单例模式(Singleton模式)

博客介绍了单例模式,单例对象能确保在一个JVM中只有一个实例。单例模式分为懒汉式和饿汉式,懒汉式在首次调用创建对象方法时创建,存在线程安全问题,可优化;饿汉式在类加载时就创建好对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例对象能保证在一个JVM中,该对象只有一个实例存在
单例模式分为懒汉式和饿汉式
一、懒汉式
只有当第一次调用创建对象的方法时才会创建对象

public class Singleton {
     private static Singleton singleton = null; 
     //限制产生多个对象
     private Singleton(){
     }  
     //通过该方法获得实例对象
     public static Singleton getSingleton(){
             if(singleton == null){
                    singleton = new Singleton();
             }
             return singleton;
     }
}

但上述代码是线程不安全的,可以选择使用synchronized关键字修饰getSingleton()方法,更优化的代码如下:

public class Singleton {
     private static Singleton singleton = null; 
     //限制产生多个对象
     private Singleton(){
     }  
     //通过该方法获得实例对象
     public static synchronized Singleton getSingleton(){
		if(singleton==null) {
			return new Singleton();
		} else {
			return singleton;
		}
     }
}

类的加载过程是线程互斥的。这样当我们第一次调用getInstance的时候,JVM能够帮我们保证instance只被创建一次,并且会保证把赋值给instance的内存初始化完毕

二、饿汉式
在类加载时就将对象创建好

public class Singleton {
     private static final Singleton singleton = new Singleton();
	//限制产生多个对象
     private Singleton(){
     }
     //通过该方法获得实例对象
     public static Singleton getSingleton(){
         return singleton;
     }  
     //类中其他方法,尽量是static
     public static void doSomething(){
     }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值