zoukankan      html  css  js  c++  java
  • 单例模式的实现方式

    一、懒汉式单例

    //懒汉式单例类.在第一次调用的时候实例化自己 
    public class Singleton {
        private Singleton() {}
        private static Singleton single=null;
        //静态工厂方法 
        public static Singleton getInstance() {
             if (single == null) {  
                 single = new Singleton();
             }  
            return single;
        }
    }
     
    以上是线程不安全的 ,在多线程下可能出现多个Singleton 实例,同时多个线程执行getInstance()
     
    要线程安全可以这样做:
      1. 在getInstance方法上加同步
      public static synchronized Singleton getInstance() {
             if (single == null) {  
                 single = new Singleton();
             }  
            return single;
     }    
     
     2. 双重检查锁定
     public static Singleton getInstance() {
            if (singleton == null) {  
                synchronized (Singleton.class) {  
                   if (singleton == null) {  
                      singleton = new Singleton(); 
                   }  
                }  
            }  
            return singleton; 
        }
     
    3. 静态内部类
    public class Singleton {  
        private static class LazyHolder {  
           private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
           return LazyHolder.INSTANCE;  
        }  
    }  
     
     
     

    二、饿汉式单例

     //饿汉式单例类.在类初始化时,已经自行实例化 
    public class Singleton1 {
        private Singleton1() {}
        private static final Singleton1 single = new Singleton1();
        //静态工厂方法 
        public static Singleton1 getInstance() {
            return single;
        }
    }
     
    类创建的同时创建了一个静态对象,以后不再改变,所以天生线程安全
  • 相关阅读:
    codeforces 645C. Enduring Exodus
    test markdown
    codeforces 817C Really Big Numbers
    797C C. Minimal string
    ubuntu配置安卓开发环境记录
    常用网址
    Mysql/Oracle/达梦中数据字典表
    Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题
    凝思磐石4.2系统字符编码的修改
    hadoop学习(三)HDFS常用命令以及java操作HDFS
  • 原文地址:https://www.cnblogs.com/sjm19910902/p/6386534.html
Copyright © 2011-2022 走看看