一个普通的Java类实现的单例模式代码如下:
/** * 单例模式 * @author glogo * */public class Singleton { private static volatile Singleton singleton = null; //构造函数必须是private private Singleton(){} public static Singleton getInsSingleton(){ if(singleton == null){ //外层if的作用:一旦唯一的一个实例被创建之后无需再synchronized,提高效率。 synchronized(Singleton.class){ if(singleton == null) singleton = new Singleton(); } } return singleton; } }
它是实现了双重检查的。
线程级别的单例模式:通过ThreadLocal<T>类型的静态成员变量 定义 仅在线程内部生效的全局对象。
public class SingletonThread{ private static final ThreadLocallocal = new ThreadLocal (){ @Override protected SingletonThread initialValue() { return new SingletonThread(); } }; private SingletonThread(){} public static SingletonThread getISingleton(){ return local.get(); } }