码迷,mamicode.com
首页 > 编程语言 > 详细

Java的单例模式(singleton)

时间:2017-08-22 10:38:30      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:==   sync   java   pre   log   blog   需要   turn   tin   

为什么需要单例?只因为国家的独生子女政策(当然现在可以生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;
	};

}

 

Java的单例模式(singleton)

标签:==   sync   java   pre   log   blog   需要   turn   tin   

原文地址:http://www.cnblogs.com/idignew/p/7409887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!