已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在Java 的单例模式中,有两种实现方式,懒汉式与饿汉式。 单例模式实现之饿汉式|-单例类Songleton /* 单例模式实现之一饿汉式* * 一开始就创建Singleton的对象并实例化* */class Singleton / 创建一个Signleton实例对象,用来存储创建好的实例 private static Singleton singleton = new Singleton(); / 将构造方法进行私有化 private Singleton() / 待执行代码 / 获取Sington实例对象 public static Singleton getInstance() / 返回实例对象 return singleton; 复制代码|-测试类 public class SingletonDemo public static void main(String args) / 创建Singleton实例对象 Singleton singleton01 = Singleton.getInstance(); Singleton singleton02 = Singleton.getInstance(); / 判断两个实例对象是否是同一个 if (singleton01 = singleton02) /相同打印The Same Object! System.out.println(The Same Object!); else /不相同打印The DifferentObject! System.out.println(The Different Object!); 复制代码|-测试结果 The Same Object!复制代码从测试的结果可以看出,获得Singleton对象是同一对象。|-饿汉式程序调用顺序图 单例模式实现之懒汉式|-单例类Songleton /* 单例模式实现之一懒汉式* * 当需要实例对象的时候再去生成对象进行实例化* */class Singleton / 声明一个Signleton变量,用来存储创建好的实例 private static Singleton singleton = null; / 将构造方法进行私有化 private Singleton() / 待执行代码 / 获取Sington实例对象 public static Singleton getInstance() / 判断singleton 是否为null,是的话实例化 if (null = singleton) singleton = new Singleton(); / 返回实例对象 return singleton; 复制代码|-测试类与测试结果 和上面单例模式实现之饿汉式的一样,达到了生成同一个Singleton的对象。|-懒汉式程序调用顺序图以上两种实现方式均单线程的情况下,但是在多线程的情况下,懒汉式就可能生成不止一个Singleton对象。如下实例 单例模式实现之懒汉式(多线程)|-单例类Songleton /* 单例模式实现之一懒汉式* * 当需要实例对象的时候再去生成对象进行实例化* * 但时在多线程的时候,生成的可能就不是一个对象了* */class Singleton / 声明一个Signleton变量,用来存储创建好的实例 private static Singleton singleton = null; / 将构造方法进行私有化 private Singleton() / 待执行代码 / 获取Sington实例对象 public static Singleton getInstance() / 判断singleton 是否为null,是的话 实例化 if (null = singleton) /捕捉异常 try /对线程进行休眠,休眠时间是随机生成的 Thread.sleep(long)(Math.random() * 1000); singleton = new Singleton(); catch (InterruptedException e) e.printStackTrace(); / 返回实例对象 return singleton; 复制代码加入了Thread.sleep()方法,让线程睡眠一段时间。|-线程类 /实现Runnable接口的线程类class SingletonThread implements Runnable /覆写Runnable接口中的run()方法 public void run() /打印获取的Singleton对象地址信息 System.out.println(Singleton.getInstance(); 复制代码用于获取Singleton的对象。|-测试类 public class SingletonDemo public static void main(String args) / 创建两个匿名线程对象,并启动 new Thread(new SingletonThread().start(); new Thread(new SingletonThread().start(); 复制代码|-测试结果 com.shengsiyuan.javalinux.singleton03.Singleton69b332com.shengsiyuan.javalinux.singleton03.Singleton173a10f复制代码结果显示生成的Singleton对象的内存地址不一样,即不是同一对象。说明在多线程的情况下单例模式的懒汉式不能达到生成同一对象的目的。 单例模式实现之懒汉式改进(多线程)使用synchronized修饰方法对Singleton类进行改进,对getInstance()进行同步加锁,即使用synchronized关键字。修改:单例类Songleton /* 单例模式实现之一懒汉式* * 当需要实例对象的时候再去生成对象进行实例化* * 多线程的时候,对生成实例的getInstance()方法进行加锁* */class Singleton / 声明一个Signleton变量,用来存储创建好的实例 private static Singleton singleton = null; / 将构造方法进行私有化 private Singleton() / 待执行代码 / 对此方法进行加锁,实现同步,来获取Sington实例对象 public static synchronized Singleton getInstance() / 判断singleton 是否为null,是的话 实例化 if (null = singleton) / 捕捉异常 try / 对线程进行休眠,休眠时间是随机生成的 Thread.sleep(long) (Math.random() * 1000); singleton = new Singleton(); catch (InterruptedException e) e.printStackTrace(); / 返回实例对象 return singleton; 复制代码|-测试结果 com.shengsiyuan.javalinux.singleton04.Singleton1b67f74com.shengsiyuan.javalinux.singleton04.Singleton1b67f74复制代码此时打印的结果是一致的,说明生成的Singleton对象是同一对象。 单例模式实现之懒汉式改进(多线程)使用synchronized代码块 在getInstance()方法中使用同步代码块进行加锁。 /* 单例模式实现之一饿汉式* * 当需要实例对象的时候再去生成对象进行实例化* * 多线程的时候,对生成实例的getInstance()方法进行加锁* */class Singleton / 声明一个Signleton变量,用来存储创建好的实例 private static Singleton singleton = null; / 将构造方法进行私有化 private Singleton() / 待执行代码 / 获取Sington实例对象 public static Singleton getInstance() / 判断singleton 是否为null,是的话实例化 if (null = singleton) / 捕捉异常 try / 对线程进行休眠,休眠时间是随机生成的 Thread.sleep(long) (Math.random() * 1000); /使用同步代码块,线程安全的创建实例 synchronized (Singleton.class) /再次检查实例是否存在,不存在的话在创建实例 if (null = singleton) singleton = new Singleton(); catch (InterruptedException e) e.printStackTrace(); / 返回实例对象 return singleton
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江横店影视职业学院《西方近现代美术作品赏析》2024-2025学年第二学期期末试卷
- 河北工程技术学院《工程化学基础》2024-2025学年第二学期期末试卷
- 合肥幼儿师范高等专科学校《计量经济模型与软件操作》2024-2025学年第二学期期末试卷
- 美术培训机构管理制度
- 天津财经大学《数据挖掘与分析》2024-2025学年第二学期期末试卷
- 2026年吉林省残疾人康复中心公开招聘编外聘用人员(1号)(13人)考试参考题库及答案解析
- 2026福建宁德市东侨经济技术开发区中小学幼儿园招聘新任教师85人笔试模拟试题及答案解析
- 2026福建厦门市集美区侨英小学产假顶岗教师招聘1人考试参考试题及答案解析
- 2026东北师范大学深圳坪山实验学校招聘实习生笔试备考试题及答案解析
- 2026四川大学华西医院本科招生宣传综合岗项目制助理招聘1人笔试模拟试题及答案解析
- 制造车间人员组织计划
- 氢气安全使用课件
- 急性喉梗阻诊疗与急救处理
- 北京首师大附中2025年七下英语期末考试模拟试题含答案
- 2024-2025学年辽宁省普名校联盟高二下学期3月月考生物试题(解析版)
- 水利工程施工安全生产管理工作导则
- 《媒介市场调查研究报告》课件
- 化工总控工-仪表自动化知识考试题库
- 大大服装厂 SOP 作业指导书
- 浙江省高校招生职业技能考试大纲(理论)药学类
- 【课件】书画同源+课件-2024-2025学年高中美术人教版+(2019)+选择性必修2+中国书画
评论
0/150
提交评论