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

    1.懒汉-线程不安全

     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4   
     5     public static Singleton getInstance() {  
     6     if (instance == null) {  
     7         instance = new Singleton();  
     8     }  
     9     return instance;  
    10     }  
    11 }  

    2.懒汉-线程安全(效率很低,99%情况下不需要同步。)

     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4     public static synchronized Singleton getInstance() {  
     5     if (instance == null) {  
     6         instance = new Singleton();  
     7     }  
     8     return instance;  
     9     }  
    10 }  

    3.饿汉

    1 public class Singleton {  
    2     private static Singleton instance = new Singleton();  
    3     private Singleton (){}  
    4     public static Singleton getInstance() {  
    5     return instance;  
    6     }  
    7 }  

    4.饿汉2

     1 public class Singleton {  
     2     private Singleton instance = null;  
     3     static {  
     4     instance = new Singleton();  
     5     }  
     6     private Singleton (){}  
     7     public static Singleton getInstance() {  
     8     return this.instance;  
     9     }  
    10 }  

    5.静态内部类

    1 public class Singleton {  
    2     private static class SingletonHolder {  
    3     private static final Singleton INSTANCE = new Singleton();  
    4     }  
    5     private Singleton (){}  
    6     public static final Singleton getInstance() {  
    7     return SingletonHolder.INSTANCE;  
    8     }  
    9 }  

    6.枚举

    1 public enum Singleton {  
    2     INSTANCE;  
    3     public void whateverMethod() {  
    4     }  
    5 }  

    7.双重校验锁

     1 public class Singleton {  
     2     private volatile static Singleton singleton;  
     3     private Singleton (){}  
     4     public static Singleton getSingleton() {  
     5     if (singleton == null) {  
     6         synchronized (Singleton.class) {  
     7         if (singleton == null) {  
     8             singleton = new Singleton();  
     9         }  
    10         }  
    11     }  
    12     return singleton;  
    13     }  
    14 }  
  • 相关阅读:
    npm 常用命令
    vue router 配合transition 切换动画
    非指针 复制对象和数组的两种方法
    Date()对象的设置与解析
    js map()处理数组和对象数据
    鉴别JS数据类型的全套方法
    JS数组与对象的遍历方法大全
    js异步原理与 Promise
    HTTP请求封装:Ajax与RESTful API
    "unresolved reference 'appium' "问题解决
  • 原文地址:https://www.cnblogs.com/chenglc/p/6922560.html
Copyright © 2011-2022 走看看