博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式
阅读量:2431 次
发布时间:2019-05-10

本文共 1483 字,大约阅读时间需要 4 分钟。

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 

 

/** * 单例类 */public class Singleton {		private static Singleton instance = null;		// 构造方法让其private,禁止外界利用new创建此类实例的可能	// 所有类都有构造方法,不编码则系统默认生成空的构造方法,	// 若有显示定义的构造方法,默认的构造方法就会失效.	private Singleton(){			}	// 获得本类实例的唯一全局访问点	public static Singleton getInstance(){				// 若实例不存在,new一个新实例,否则返回已有的实例		if(instance==null){			instance = new Singleton();					}		return instance;	}}

 

/** * 多线程时的单例 */public class SingletonMultiThread {		private static SingletonMultiThread instance = null;		private SingletonMultiThread(){			}		// 单例对象的初始化同步	private static synchronized void syncInit() {				// 多线程同时排队等候创建实例时,通过实例判断存在,		// 避免第一个线程创建实例出来后,第二个线程再创建新实例,达到单例的目的。			if(instance==null){			instance = new SingletonMultiThread();		}			}	public static SingletonMultiThread getInstance(){		// 先判断实例是否存在,不存在再进行同步处理,即实例初始化		if(instance==null){			syncInit();		}		return instance;	}}

 

public class Main {	public static void main(String[] args) {				Singleton s1 = Singleton.getInstance();		Singleton s2 = Singleton.getInstance();				// 比较两次实例化结果对象是否相同		if(s1==s2){			System.out.println("两个对象是相同的实例");		}	}}

 

输出结果为:

 

两个对象是相同的实例

 

 

单例模式与静态类初始化的区别:

 

 1.静态类初始化,在自己被加载时就将自己实例化,被形象地称之为饿汉式单例类,

                          类一加载就实例化对象,提前占用系统资源。
 2.单例模式,则在第一次被引用时,才会将自己实例化,被称为懒汉式单例类,
                    面临多线程访问时的安全性问题,需采取同步处理好多线程安全问题。

 

public class SingletonStatic {		// 直接生成自己的内部对象实例	private static SingletonStatic instance = new SingletonStatic();	private SingletonStatic(){			}	private static SingletonStatic getInstance(){		return instance;	}}

 

转载地址:http://lyxmb.baihongyu.com/

你可能感兴趣的文章
C语言贪吃蛇
查看>>
Python练手项目
查看>>
知网毕业论文爬取
查看>>
Django无法显示图片
查看>>
AOP技术基础
查看>>
聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)
查看>>
Spring MVC 框架的请求处理流程及体系结构
查看>>
mybatis-generator-gui界面工具生成实体
查看>>
Github访问速度很慢的原因,以及解决方法
查看>>
数据库分区、分表、分库、分片
查看>>
数据库垂直拆分 水平拆分
查看>>
关系型数据库设计:三大范式的通俗理解
查看>>
Hibernate常见面试题
查看>>
如何写一份优秀的java程序员简历
查看>>
如何避免软件行业的薪资天花板?
查看>>
Java知识体系最强总结(2020版)
查看>>
MyBatis与Hibernate区别
查看>>
笔记︱风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
查看>>
MySQL存储引擎之MyISAM与InnoDB区别
查看>>
Python numpy小练习
查看>>