技术要点:
1.确保其他人调用的时候只能拿到一个实例对象。防止对方采用new或者反射等途径获取,我们需要私有化构造函数并且抛出error
2.提供public入口方法提供给其他人调用
这种称之为懒汉式单例
public class MySingle {
private static final MySingle single = new MySingle();
private MySingle() {
}
public static MySingle getInstall() {
return single;
}
}
饿汉式单例
public class MySingle {
private static MySingle single = null;
private MySingle() {
}
public static MySingle getInstall() {
if (single == null) {
single = new MySingle();
}
return single;
}
}
多线程环境下,可能会造成多个实例对象的创建,我们可以采用双层锁机制来完成。
public class MySingle {
private static MySingle single = null;
private MySingle() {
}
public static MySingle getInstall() {
synchronized (MySingle.class) {
if (single == null) {
synchronized (MySingle.class) {
single = new MySingle();
}
}
}
return single;
}
}
注意:为什么单层锁定机制无法保证单例的创建,大家可以自己思考或者百度一下。
===================================================================
多线程环境下。。。好像这么做才是对的。。。 引用:
http://blog.youkuaiyun.com/zzhays/article/details/7761320
采用内部类的方式
package com.factory;
public class Singleton {
private Singleton() {
}
private static class SingletonContainer {
private static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonContainer.instance;
}
}