单例模式

定义 确保一个类只有一个实例,并提供一个全局访问点。
延迟实例化

public class Singleton {
	private static Singleton instance;

	private Singleton() { //构造函数私有化;
	};

	public static Singleton getInstatnce() { //全局访问点;
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

注意对于多线程可能存在同时创建出多个实例出来,
延迟实例化的改进


public class Singleton {
	private static Singleton instance;

	private Singleton() { //构造函数私有化;
	};


//加入synchronized进行同步,但是性能会下降;
	public static synchronized Singleton getInstatnce() { //全局访问点;
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

不延迟

//JVM加载这个类的时候就创建实例;
public class Singleton {
	private static Singleton instance =  new Singleton();

	private Singleton() { //构造函数私有化;
	};

	public static synchronized Singleton getInstatnce() { //全局访问点;
	
		return instance;
	}
}

双重检查加锁


public class Singleton {
	private volatile static Singleton instance ;

	private Singleton() { //构造函数私有化;
	};

	public static  Singleton getInstatnce() { //全局访问点;
	
		if(instance==null) {
			synchronized(Singleton.class){ //实例化的时候才加锁;
				instance = new Singleton();
			}
		}
		return instance;
	}
}

posted @   LynnMin  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
阅读排行:
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Huawei LiteOS基于Cortex-M4 GD32F4平台移植
· mysql8.0无备份通过idb文件恢复数据过程、idb文件修复和tablespace id不一致处
点击右上角即可分享
微信分享提示