• Java并发程序设计(八)设计模式与并发之单例模式


    设计模式与并发之单例模式

    简单的单例实现;

    public class Singleton {
    
        private Singleton(){
            System.out.println("Creating Singleton");
        }
    
        private static Singleton instance=new Singleton();
    
        public static Singleton getInstance(){
            return instance;
        }
    }

    缺点:何时产生实例,不好控制。

    延迟加载,需要instance才去创建:

     1 /**
     2  * @author: Tang Jiujia
     3  * @version: 2017/9/18 0018 14:44
     4  */
     5 public class LazySingleton {
     6 
     7     private LazySingleton(){
     8         System.out.println("LazySingleton created!");
     9     }
    10 
    11     private static LazySingleton instance=null;
    12 
    13     public static synchronized LazySingleton getInstance(){
    14         if(instance==null){
    15             return new LazySingleton();
    16         }
    17         return instance;
    18     }
    19 }

    缺点:并发条件下加锁,影响性能。

    利用静态内部类实现单例,客服以上两种方法的缺陷:

     1 /**
     2  * @author: Tang Jiujia
     3  * @version: 2017/9/18 0018 14:53
     4  */
     5 public class StaticSingleton {
     6 
     7     private StaticSingleton(){
     8         System.out.println("StaticSingleton created!");
     9     }
    10 
    11     private static class SingletonHolder{
    12         private static StaticSingleton instance=new StaticSingleton();
    13     }
    14 
    15     public static StaticSingleton getInstance(){
    16         return SingletonHolder.instance;
    17     }
    18 }
    Simple is important!
  • 相关阅读:
    面试题
    Tornado中insert into sql语句的构造
    依赖注入
    Tornado抽象方法抽象类
    mysql 随机选取一条记录
    java中如何高效的判断数组中是否包含某个元素---
    Java8中计算日期时间差
    MySQL5.7中使用JSON
    sql中的in与not in,exists与not exists的区别
    APP开发浅谈-Fiddler抓包详解
  • 原文地址:https://www.cnblogs.com/Shadowplay/p/7543077.html
Copyright © 2020-2023  润新知