实现方式:

1.构造方法私有化

2.创建类的静态变量,不实例化

3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化

4.在外部暴露的公共方法上添加synchronized关键字(给该方法加锁)

案例:

package singlePattern;public class SinglePattern4 {private SinglePattern4(){}private static SinglePattern4 instance;public static synchronized SinglePattern4 getInstance(){if(instance == null){instance = new SinglePattern4();}return instance;}}

优缺点分析:

1.保证了线程的安全

2.降低了系统效率,效率极大的降低了,每个线程在想获得类的实例的时候,执行getInstance()方法都要进行同步。而其实这个方法只执行一次实例化代码就够了,后面的想获得该类实例直接return就行了。方法进行同步效率太低

3.结论:在实际开发中,不推荐使用这种方式

设计模式之单例模式8种实现方式,其四:懒汉式(线程安全,同步方法)相关推荐

  1. 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 4.在公共方法的内部生成实例的代码块加上synchroniz ...

  2. 设计模式之单例模式8种实现方式,其八:枚举方式

    实现方式: package singlePattern;enum Singleton{INSTANCE;public void method(){} } 优缺点说明: 1.这借助JDK1.5中添加的枚 ...

  3. 设计模式之单例模式8种实现方式,其六:双重检查

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化,给该静态变量添加volatile关键字,设定instance为共享变量 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在 ...

  4. 设计模式之单例模式8种实现方式,其一:饿汉式-静态常量饿汉式

    实现方式分为3步骤: 1.构造方法私有化 2.类的内部创建对象 3.向外部暴露一个静态的公共方法 实例: package singlePattern;public class SinglePatter ...

  5. 设计模式之单例模式8种实现方式,其七:静态内部类

    实现方式: 1.构造方法私有化 2.创建静态内部类 3.在静态内部类里面创建外面类的final修饰的实例 4.通过静态共有方法去返回创建的实例 代码如下: package singlePattern; ...

  6. 设计模式之单例模式8种实现方式,其三:懒汉式(线程不安全)

    实现方式: 1.构造方法私有化 2.创建类的静态变量,不实例化 3.向外部暴露一个静态的公共方法,并判断是否存在实例,如果不存在,则实例化 案例: package singlePattern;publ ...

  7. 设计模式之单例模式8种实现方式,其二:饿汉式-静态代码块饿汉式

    饿汉式(静态代码块)应用步骤: 1.构造器私有化 2.创建类的静态变量,不实例化 3.静态代码块实例化 4.向外部暴露一个静态的公共方法 案例: package singlePattern;publi ...

  8. 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举

    懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...

  9. java设计模式之单例模式(七种方法)

    单例模式:个人认为这个是最简单的一种设计模式,而且也是在我们开发中最常用的一个设计模式. 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个 ...

最新文章

  1. eclipse opengl java_OpenGL 之 Eclipse 开发环境搭建 | 学步园
  2. SpringBoot集成websocket(java注解方式)
  3. python3 多线程简介
  4. Linux Shell的输入彩色字体
  5. 深度好文:2018 年 NLP 应用和商业化调查报告
  6. 建筑系学生怎么系统地学 Photoshop、CAD 之类软件?
  7. 在windows下使用cmd命令行对java文件进行编译和执行
  8. 基于OpenCV库的Gabor滤波器的实现
  9. 《疯狂的站长》读后感2
  10. PackageManager.hasSystemFeature Android SystemServer裁剪
  11. 中企海外周报 | 华为在德国发布mate30系列手机;一汽新车亮相法兰克福车展
  12. 区块链安全保卫战:三分技术,七分管理
  13. 现代公关无需遮遮掩掩,明火执仗开干就行
  14. 7-1 统计字符串中不同种类的字符个数 (10 分)
  15. 人脸识别被滥用,三人成虎不足挂齿?
  16. 2022年网搭国赛PXE服务
  17. alt与title的区别(img属性)
  18. 游戏建模在国内的发展前景,3D建模行业真的很缺人吗?
  19. 一种应用于wifi的倒F天线的设计与HFSS仿真优化
  20. 使用动态代理实现用AOP对数据库进行操作

热门文章

  1. Pandas GroupBy 分组(分割-应用-组合)
  2. double类型转integer类型_边坡支挡类型、构造及设计计算,需要的就转走!
  3. 混合云存储阵列 > 产品简介 > 应用场景 > 双活容灾
  4. Java基础学习总结(181)——Nacos、Apollo、Config配置中心如何选型?
  5. Windows学习总结(22)——Windows基线检查加固脚本
  6. Maven学习总结(46)——Maven跳过单元测试的两种方法及其区别(-Dmaven.test.skip=true与-DskipTests)
  7. Java基础学习总结(116)——Map使用相关问题总结
  8. Linux学习总结(40)——史上最全Linux命令科普
  9. linux /dev/null,Shell中 /dev/null和 /dev/null 21
  10. html点线面制作,openlayers 添加点线面 Demo(可直接运行)