• 单例设计模式


    饿汉式:

    一上来我就把对象给你 new 好了,你来了直接就可以拿去“吃”了

     1 public class Single {
     2     // 1.私有化构造方法
     3     private Single() {
     4     }
     5 
     6     // 2.new 一个Single对象
     7     private static final Single single = new Single();
     8 
     9     // 创建一个方法,让外面的类可以拿到对象的引用
    10     public static Single getInstance() {
    11         return single;
    12     }
    13 }

    懒汉式

    (要是有人问单例的延迟加载方式指的就是这种方式)

    一开始我就不给你 new 对象,你来找我,我在给你创建一个对象

     1 public class Single {
     2     // 1.私有化构造方法
     3     private Single() {
     4     }
     5 
     6     // 2.声明一个对象的引用
     7     private static Single single = null;
     8 
     9     // 3.判断一下,如果对象为null,则创建一个新对象
    10     public static Single getInstance() {
    11         if (single == null) {
    12             single = new Single();
    13         }
    14         return single;
    15     }
    16 }

    懒汉式有一个缺点,就是在多线程中使用的时候,可能会创建多个实例对象,比如,线程1来调用 getInstance() 方法,判断了 s==null,然后线程1由于未知的原因阻塞了,线程2再来调用 getInstance() 方法,判断 s==null ,线程2就创建了一个对象,这时候线程1又运行了,那么线程1就会创建一个对象~这样就会造成多个对象~

    懒汉式的线程优化——加一个锁

     1 public class Single {
     2     // 1.私有化构造方法
     3     private Single() {
     4     }
     5 
     6     // 2.声明一个对象的引用
     7     private static Single single = null;
     8 
     9     // 3.判断一下,如果对象为null,则创建一个新对象(同步锁synchronized)
    10     public static synchronized Single getInstance() {
    11         if (single == null) {
    12             single = new Single();
    13         }
    14         return single;
    15     }
    16 }

    >
    作者:豌豆果果
    出处:https://www.cnblogs.com/hylogs/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    觉得有所帮助,可以请果果喝咖啡哟^_^!

  • 相关阅读:
    oracle在线重定义表
    Oracle 分区表
    oracle表空间不足扩容的方法
    oracle查看锁表进程,杀掉锁表进程[转载]
    创建sequence和触发器出现权限不足
    百万级数据库优化方案[转载]
    oracle 表空间
    数据库MySQL——SQL语句(命令)
    HTTP状态码
    http和https
  • 原文地址:https://www.cnblogs.com/hylogs/p/9250928.html
Copyright © 2020-2023  润新知