正文
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;
}; }