Java设计模式——单例模式

本文介绍了单例设计模式的概念及其在Java中的实现方式。探讨了单例模式如何通过限制类的实例化过程来确保整个应用程序中只存在一个实例,并讨论了几种不同的线程安全实现方法。

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

概述

 单例设计模式是Java工程中最常用,也是最简单的设计模式。其最核心特点便是采用单例设计模式的类只有一个实例,这样

的的好处就是整个工程可以节省了系统开销,不必每次调用的类的中的方法时都生成一个实例。同时,也有效避免了线程池、缓

存、硬件设备在调用多个实例时出现冲突的情况。而且,整个工程可以共享这个实例中的属性的值。

基本实现

pulic class SingleTon {
	 private static SingleTon mSingleTon; //静态、私有化实例
	 /**
	  *构造方法私有化
	  */
	 private SingleTon(){	
	 } 
	 /**
	  *获取类的实例
	  */
	 public static SingleTon getInstance(){
		 if(mSingleTon==null){
			 mSingleTon = new SingleTon();
		 }
		 return mSingleTon;
	 }
 }

 单例设计模式的基本实现代码如下所示。需要注意的是,实例应该是静态的、私有化的(也可以是public,但不安全)

并且,要把构造方法进行封装,这样的话就不能从外部不能从外部进行实例化。

构建方法优化

 上面的基本实现,又称为“懒汉模式”,这是一种线程不安全的创建方式。多个线程同时操作时,会有冲突或者有可能创建

出多个实例。下面介绍几种线程安全的创建方法。

1)加同步锁

pulic class SingleTon {
	 private static SingleTon mSingleTon; //静态、私有化实例
	 /**
	  *构造方法私有化
	  */
	 private SingleTon(){
	 } 
	 /**
	  *获取类的实例
	  */
	 public static sychronized SingleTon getInstance(){
		 if(mSingleTon==null){
			 mSingleTon = new SingleTon();
		 }
		 return mSingleTon;
	 }
 }
  加上同步锁,就可以多个线程操作时也会只能创建一个实例对象,大大增加了线程安全性和效率。

2)双重同步锁

 这个就更狠了,话不多说,代码如下。

pulic class SingleTon {
	private static SingleTon mSingleTon; //静态、私有化实例
	/**
	 *构造方法私有化
	 */
	private SingleTon(){
	} 
	/**
	 *获取类的实例
	 */
	public static synchronized SingleTon getInstance(){
		synchronized (SingleTon.class) {
			if(mSingleTon==null){
				mSingleTon = new SingleTon();
			}
		}
		return mSingleTon;
	}
}
3)“饿汉”创建方式

public class SingleTon {
     private static SingleTon instance = null;
     static {
         instance = new SingleTon();
     }
     private SingleTon() {
     }
     public static SingleTon getInstance() {
         return instance;
     }
 }
这种方式在类初始化的时候创建实例,即在第一次调用getInstance()方法之前就创建了实例。这种方式基于classloder
机制,也避免了线程同步的问题。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值