美文网首页
java 两种线程安全的单例

java 两种线程安全的单例

作者: Tonki | 来源:发表于2017-02-12 11:24 被阅读0次

    一、 volatile和双检锁

    public class EventBus {
    
        //volatile 保证了各个线程的得到的defaultInstance都是最新的
        static volatile EventBus defaultInstance;
    
        /** Convenience singleton for apps using a process-wide EventBus instance. */
        public static EventBus getDefault() {
            if (defaultInstance == null) {
                synchronized (EventBus.class) {
                    if (defaultInstance == null) {//进入同步块后再次判断最新的defaultInstance
                        defaultInstance = new EventBus();
                    }
                }
            }
            return defaultInstance;
    }
    

    二、 利用静态内部类

    public class HttpMethods {
    
        private HttpMethods(){};
    
        private static class SingletonHolder{
            private static final HttpMethods INSTANCE = new HttpMethods();
        }
    
        //获取单例
        public static HttpMethods getInstance(){
            //实例为静态类的静态变量
            return SingletonHolder.INSTANCE;
        }
    }

    相关文章

      网友评论

          本文标题:java 两种线程安全的单例

          本文链接:https://www.haomeiwen.com/subject/rylaittx.html