




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康线上教程课件下载网
- 国一花木兰数学试卷
- 2025年中国炼胶机械行业市场深度分析及发展趋势预测报告
- 2021-2026年中国转基因农业市场供需现状及投资战略研究报告
- 2024-2030全球水源热工业热泵行业调研及趋势分析报告
- “以竹代塑”主要产品名录(2025年版)
- 医院医保政策解读课件
- 绿色转型观察|中国基础设施公募在可再生能源领域进展研究 2025
- 营口市公共场所管理办法
- 蓝天救援队车牌管理办法
- 中药湿敷技术
- 2023年上海市教师招聘考试《教育心理学》考前模拟题及答案
- DLT-969-2023年变电站运行导则
- ZAPI交流故障表 萨牌代码
- 《健康经济学》课件Chapter16
- 儿童用药剂量
- 2023年感动中国十大人物颁奖词-范文汇编
- 人教版高中化学必修1教师用书
- 四员一长抽考题库
- 鲁班奖大型游乐场施工组织设计
- 牛津译林版小学英语二年级下册同步练习试题(全册)
评论
0/150
提交评论