java 两种线程安全的单例

一、 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 SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,130评论 0 8
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,341评论 11 349
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,726评论 0 11
  • 职场如战场,玩的不是实力,玩的是心跳;哈哈,我也许说的太夸张点了,职场不管是不是战场,都得控制好的自己的心跳;古人...
    德哥阅读 3,505评论 0 4
  • 昨天早上和老朱一起打车上班。老朱在车里跟我讲了她朋友最近筹划的一个项目,乍一听和老孟头之前提过的想法很相近,而且有...
    老孟头家有只猪阅读 413评论 0 1