zoukankan      html  css  js  c++  java
  • Java的单例模式(singleton)

    为什么需要单例?只因为国家的独生子女政策(当然现在可以生2个)

    单例是一个很孤独的物种,因为它的类里面做多只有也仅只有它一个。

    常见的是懒汉及饿汉模式,

    1.懒汉,为什么这么叫,看看英文,原为lazy loading,lazy(懒惰的),laoding(音如同佬),叫懒佬,然后一个佬==一条汉子,为好听,故懒汉。

    最基础的懒汉模式:

    //单例模式
    public class Singleton {
    	
    	// 私有化构造方法,使得外部不可能有由new产生实例;
    	private Singleton() {
    	}
    
    	// 懒汉模式
    	private static Singleton instance = null;
    	//不加synchronized,线程有问题;
    	public static Singleton getInstance() {
    		if (instance == null)
    		instance = new Singleton();
    		return instance;
    	}
    
    }
    

     上面有线程安全的问题,如果多线程情况下,可以得出多个实例。

    加入synchronized 改进后:

    //单例模式
    public class Singleton {
        
        // 私有化构造方法,使得外部不可能由用new产生实例;
        private Singleton() {
        }
    
        // 懒汉模式
        private static Singleton instance = null;
        //不加synchronized,线程有问题;
        public static synchronized Singleton getInstance() {
            if (instance == null)
            instance = new Singleton();
            return instance;
        }
    
    }

    懒,因为用到了才加载。

    饿汉,汉就不解释,上面有。为什么叫饿?因为不管你有没使用这个单例,它都会实例化,在内存中,好像一个很饥饿的人,不管什么,先吃了再说。

    具体如下:

    //饿汉模式
    public class Singleton2 {
    	//私有化构造方法,使得外表不能用new产生一个实例。
    	private Singleton2(){}
    	//饿汉模式,不管你有没用这个实例,先实例化。
    	private static Singleton2 instance =new Singleton2();
    	public static Singleton2 getInstance(){
    		return instance;
    	};
    
    }
    
  • 相关阅读:
    数据库设计Step by Step篇目整理及下载地址
    SQL puzzles and answers读书笔记——预算执行问题
    MongoDB快速入门——SQL与MongoDB的对照
    C语言中的atan和atan2
    FTP命令
    vueelementadmin前端跨域问题解决
    回归
    学习kvm(一)
    利用spicevdagent实现文本拷贝、鼠标非陷入
    政策转向确立,降准只是开始
  • 原文地址:https://www.cnblogs.com/idignew/p/7409887.html
Copyright © 2011-2022 走看看