单例模式和ThreadLocal的用法及区别

单例模式有不少种,我只说两种最有表明性的。安全

package volati;

/**
 * Created by lhw on 16-7-29.这种属于懒加载,线程安全
 */
public class Demo1 {
    private static Demo1 demo1;
    private Demo1() {
    }
    public static synchronized static Demo1 getDemo() ;
        if(demo1==null)
            demo1 =new Demo1();
        return demo1;
    }
}

 -----多线程

package volati;

/**
 * Created by lhw on 16-7-29.类加载时初始化类
 */
public class Demo2 {

    private static Demo2 demo2 = new Demo2();
    private Demo2() {
    }
    public static Demo2 getDemo2() {
        return demo2;
    }
}

--------------ide

package volati;

/**
 * Created by lhw on 16-7-29.这种状况的单利用于多线程的数据隔离。即每一个线程都有惟一的demo3。
 */
public class Demo3 {

    public static ThreadLocal<Demo3> instance = new ThreadLocal<Demo3>(){
        @Override
        protected Demo3 initialValue() {
            return new Demo3();
        }
    };

    public static Demo3 getInstance(){
        return instance.get();
    }
}
相关文章
相关标签/搜索