本帖最后由 肥猫 于 2013-7-15 20:58 编辑
一种懒汉式,一种饿汉式,我来个懒汉.
- <P>package cn.lj.singleton;
- //JAVA单例模式之懒汉式
- public class Singleton2 {
- //声明该类的一个实例,但并不立刻初始化
- private static Singleton2 s;
- //构造方法私有化
- private Singleton2(){}
- //提供对外部访问该类实例的方法</P>
- <P>public static Singleton2 getInstance(){
- if(s==null){
- synchronized(Singleton2.class){//由于考虑多线程情况这里采用双重判定,若有线程访问则对字节码文件上互斥锁
- if(s==null){
- s = new Singleton2();
- }
- }
- }
- return s;</P>
- <P> } </P>
- <P>}
- </P>
复制代码饿汉式 对象预先加载,线程是安全的,在类创建好的同时对象生成,调用获得对象实例的方法反应速度快,代码简练。 懒汉式: 对象延迟加载,效率高,只有在使用的时候才实例化对象,但若设计不当线程会不安全,代码相对于饿汉式复杂,第一次加载类对象的时候反应不快。 其实上面代码还不够完善,若是遇见反序列化机制强大的创建对象能力,此单例模式原则还是会被破坏,需要在上面代码在加个readResolve()才可防止其创建对象.
|