zoukankan      html  css  js  c++  java
  • 单例模式(规整版)

    单例模式写法有很多 主要考虑到 以下三方面 1.线程安全 2.不会因为序列化而产生新实例 3.防止反射攻击

    之前一直在用饿汉模式,个人推荐枚举,饿汉次之。 

    单例模式
    1、懒汉模式  线程不安全 
    public class SingleTon {
    	private static SingleTon instance;
    	private SingleTon() {
    	}
    	 public static SingleTon getIntence() {
    	
    	 if (instance == null) {
    	 instance = new SingleTon();
    	 }
    	 return instance;
    	 }
    	 }
    	 
    	 //  懒汉模式 线程安全
    public class SingleTon {
    		private static SingleTon instance;
    	private SingleTon() {
    	}
    	 public static synchronized SingleTon getIntence() {
    	
    	 if (instance == null) {
    	 instance = new SingleTon();
    	 }
    	 return instance;
    	 }
    	 }
    	 
    	 2、 饿汉模式   始终有一个实例在内存中
    	 //	 饿汉模式 一上来就加载   避免多线程的同步问题  类装载的时候就初始化
    	 public class SingleTon {
        public static SingleTon instance=new SingleTon();
    	 private SingleTon(){};
    	 public static SingleTon getInstance(){
    		return instance;
    	}
    	 }
    	 
    	 3、静态内部类 延时加载调用时候才有实例在内存中 
    	 //	静态内部类  保证只有一个线程 类装载的时候不一定初始化  
    	  public class SingleTon { 
    	private static class MySington{
    		private static final SingleTon myInstance=new SingleTon();
    	}
    	private SingleTon(){};
    	private static SingleTon getinstance(){
    		return MySington.myInstance;
    	}
    		 }
    	 
    	 4、枚举   自由序列化 保证单个实例  线程安全 方便使用
    	 public enum EnumSingleTon {
    	INSTANCE;
    	private EnumSingleTon() {
    	}
    	public void sysEnum() {
    		System.out.println("来自枚举");
    	}
       }
       
       5、 双层检测锁机制  加强版懒汉模式 
    	   public class SingleTon { 
    	 public static SingleTon getInstance(){
    		 if(instance==null){  // 单层检测
    			 synchronized (SingleTon.class) { // 加锁
    				if(instance==null){    // 再次检测
    					instance=new SingleTon();
    				}
    			}
    		 }
    		 return instance;
    	 }
    	  }
    	 
    

      

  • 相关阅读:
    个体户、独资公司、有限公司、股份公司、控股公司、集团公司
    个人所得税
    移动端下拉滚动刷新
    web页面引入字体
    Flex布局
    NodeJS包管理器之Yarn
    域名、顶级域名、一级域名、二级域名、子域名
    JVM线程状态Running、Sleeping、Wait、Park、Monitor
    Java虚拟机解释器与JIT编译器
    ASP.NET之Cookie(坑爹的Response.Cookies.Remove)
  • 原文地址:https://www.cnblogs.com/kukum/p/java_design_singleton.html
Copyright © 2011-2022 走看看