zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

    1、什么是单例模式?
    单例模式就是一个类只会有一个实例。
    2、单例模式实现方式
    2.1 懒汉模式
    /**
    * 保证该类只会生成一个类实例
    */
    public class LayzSinglePattern {
    private static LayzSinglePattern instance ;
     
    /**
    * 静态内部类,静态内部类是第一次被使用的时候加载的
    */
    private static class LayzHolder {
    private static final LayzSinglePattern INSTANCE = new LayzSinglePattern();
    }
     
    private LayzSinglePattern(){
    //do something
    }
     
    /**
    * 线程不安全的
    * @return
    */
    public static LayzSinglePattern getInstance() {
    if (null == instance) {
    instance = new LayzSinglePattern();
    }
    return instance;
    }
     
    /**
    * 线程安全的
    * @return
    */
    public static synchronized LayzSinglePattern getInatanceSecurity() {
    if (null == instance) {
    instance = new LayzSinglePattern();
    }
    return instance;
    }
     
    /**
    * 双重锁保证线程安全
    * @return
    */
    public static LayzSinglePattern getInstanceDoubbleLock() {
    if (null == instance) {
    synchronized(LayzSinglePattern.class) {
    if (null == instance){
    instance = new LayzSinglePattern();
    }
    }
    }
     
    return instance;
    }
     
    /**
    * 静态内部类保证线程安全
    * @return
    */
    public static LayzSinglePattern getInstanceInnerClass() {
    return LayzHolder.INSTANCE;
    }
     
    }
     
    2.2 饿汉模式
    /**
    * 饿汉模式采用关键字final修饰,final天生是线程安全的
    */
    public class HungrySinglePattern {
     
    private static final HungrySinglePattern instance = new HungrySinglePattern();
     
    public static HungrySinglePattern getInstance() {
    return instance;
    }
    }
     
     注意:JAVA反射会使单例模式失效
     
     
     
  • 相关阅读:
    【8.12测试】辉夜的见面礼
    全国标准信息公共服务平台
    win10易升更新
    WPF 中的父子窗口
    C#通过事件跨类调用WPF主窗口中的控件
    Apache Hudi 介绍与应用
    【总结】Spark任务的core,executor,memory资源配置方法
    springboot基于spark-launcher构建rest api远程提交spark任务
    spark 输出到hdfs小文件过多
    大数据
  • 原文地址:https://www.cnblogs.com/tspeking/p/tspeking.html
Copyright © 2011-2022 走看看